哈尔滨理工大学
软件与微电子学院
实 验 报 告
(2020-2021第二学期)
课程名称: | NoSQL数据库技术(双语) |
班 级: | 软件18- 1 班 |
学 号: | 1814010130 |
姓 名: | 张立辉 |
哈尔滨理工大学软件与微电子学院
实验名称: | 实验二 键值数据库无固定模式数据的增删改查 | 专 业 | 软件工程 | |||
---|---|---|---|---|---|---|
姓 名 | 张立辉 | 学 号 | 1814010130 | 班 级 | 软件18-1 |
一、实验目的:
(1)理解无固定模式的含义。
(2)理解无固定模式的必要性。
(3)掌握无固定模式的存取方法。
二、实验内容:
分析项目中数据存储的需求,给出无固定模式数据存取的设计方案,并对比关系数 据库存储方案的差异,提交代码和文档。
在实际情况中,一个用户可能有多次购买商品,也可能从来没有购买商品。按照下 列要求,在实验一的基础上,改进在线商城系统,并实现无固定模式数据的存取方法。
其中,用户购物信息包括:商品名(productname)、价格(price)、数量(amount)、 品牌(productbrand)、其他与商品相关的信息。
(1)任务一、用户及其购物信息的存取 改进如下接口的方法,实现聚合信息(用户及其购物信息)的增删改查。
(2)任务二、在增删改的同时,记录每一种商品被购买的次数和数量
(3)任务三、利用反向索引技术实现根据商品查询购买者(选择) 方法定义如下:
三、实验过程:
实验环境:
阿里云ECS服务器下的Redis6.2.1
Windows10操作系统下的IntelliJ IDEA 2020.3.3 (Ultimate Edition)
功能实现:
UserDao2.java
package com.oracle.dao;
import com.oracle.pojo.UserVO2;
/**
* @author spondere
* @version 1.8
*/
public interface UserDao2 {
public UserVO2 queryById(String userId);
public void insert(UserVO2 user);
public void update(UserVO2 user);
public void delete(UserVO2 user);
}
UserDaoImpl.java
package com.oracle.dao;
import com.alibaba.fastjson.JSON;
import com.oracle.pojo.Product;
import com.oracle.pojo.UserVO2;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.List;
/**
* @author spondere
* @version 1.8
*/
public class UserDaoImpl implements UserDao2 {
private Jedis jedis = new Jedis("121.89.197.4",6379);
public UserVO2 queryById(String userid) {
jedis.auth("123");
String key = userid;
String str = jedis.get(key);
UserVO2 temp = JSON.parseObject(str, UserVO2.class);
return temp;
}
public void insert(UserVO2 user) {
jedis.auth("123");
String key = user.getUserid();
jedis.set(key, JSON.toJSONString(user));
List<Product> ps = user.getproduct();
for(int i = 0; i < ps.size(); i++) {
Product p = ps.get(i);
String productname = p.getProductname();
String amount = p.getAmount();
String namevalue = jedis.get(productname);
if(namevalue == null) {
jedis.set(productname, amount);
}
else {
namevalue += ("," + amount);
jedis.set(productname, namevalue);
}
//
String product = "_" + productname;
String value = jedis.get(product);
if(value == null) {
jedis.set(product, key);
}
else {
value += ("," + key);
jedis.set(product, value);
}
}
}
public void update(UserVO2 user) {
jedis.auth("123");
String key = user.getUserid();
jedis.del(key);
insert(user);
}
public void delete(UserVO2 user) {
jedis.auth("123");
String key = user.getUserid();
jedis.del(key);
}
public List<UserVO2> queryByProductName(String productName) {
jedis.auth("123");
List<UserVO2> result = new ArrayList<UserVO2>();
String str = jedis.get("_" + productName);
String[] idList = str.split(",");
for(int i = 0; i < idList.length; i++) {
result.add(queryById(idList[i]));
}
return result;
}
}
Product.java
package com.oracle.pojo;
/**
* @author spondere
* @version 1.8
*/
public class Product {
private String productname;
private String price;
private String amount;
private String productbrand;
public String getProductname() {
return productname;
}
public void setProductname(String productname) {
this.productname = productname;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
public String getProductbrand() {
return productbrand;
}
public void setProductbrand(String productbrand) {
this.productbrand = productbrand;
}
}
UserVO2.java
package com.oracle.pojo;
import java.util.List;
/**
* @author spondere
* @version 1.8
*/
public class UserVO2 {
private String username;
private String password;
private String userid;
private String birthday;
private String userico;
private List<Product> product;
public String getUsername() {
return username;
}
public void setUsername(String userName) {
this.username = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String passWord) {
this.password = passWord;
}
public String getUserid() {
return userid;
}
public void setUserid(String userId) {
this.userid = userId;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String Birthday) {
this.birthday = Birthday;
}
public String getUserico() {
return userico;
}
public void setUserico(String userIco) {
this.userico = userIco;
}
public void setproduct(List<Product> productList) {
this.product = productList;
}
public List<Product> getproduct() {
return product;
}
@Override
public String toString() {
return "UserVO2{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", userid='" + userid + '\'' +
", birthday='" + birthday + '\'' +
", userico='" + userico + '\'' +
", product=" + product +
'}';
}
}
Test.java
package com.oracle;
import com.oracle.dao.UserDao2;
import com.oracle.dao.UserDaoImpl;
import com.oracle.pojo.Product;
import com.oracle.pojo.UserVO2;
import java.util.ArrayList;
import java.util.List;
/**
* @author spondere
* @version 1.8
*/
public class Test {
public static void main( String[] args ) {
UserVO2 t = new UserVO2();
t.setUserid("1814010130");
t.setUsername("test");
t.setPassword("123");
t.setBirthday("2021-04-02");
t.setUserico("C:\\Users\\zlh\\Desktop\\图片\\Snipaste_2021-04-06_17-22-17.png");
Product p1 = new Product();
p1.setProductname("矿泉水");
p1.setAmount("5");
Product p2 = new Product();
p2.setProductname("酸奶");
p2.setAmount("2");
Product p3 = new Product();
p3.setProductname("薯片");
p3.setAmount("7");
List<Product> productList = new ArrayList<Product>();
productList.add(p1);
productList.add(p2);
productList.add(p3);
t.setproduct(productList);
UserDao2 userDao = new UserDaoImpl();
userDao.insert(t);
UserVO2 u = userDao.queryById("1814010130");
System.out.println(u);
}
}
Test2.java
package com.oracle;
import com.oracle.dao.UserDaoImpl;
import com.oracle.pojo.Product;
import com.oracle.pojo.UserVO2;
import java.util.ArrayList;
import java.util.List;
/**
* @author spondere
* @version 1.8
*/
public class Test2 {
public static void main( String[] args ) {
UserVO2 t = new UserVO2();
t.setUserid("1814010130-1");
t.setUsername("test2");
t.setPassword("321");
t.setBirthday("2021-04-03");
t.setUserico("C:\\Users\\zlh\\Desktop\\图片\\test.png");
Product p1 = new Product();
p1.setProductname("矿泉水");
p1.setAmount("5");
Product p2 = new Product();
p2.setProductname("酸奶");
p2.setAmount("2");
Product p3 = new Product();
p3.setProductname("薯片");
p3.setAmount("7");
List<Product> productList = new ArrayList<Product>();
productList.add(p1);
productList.add(p2);
productList.add(p3);
t.setproduct(productList);
UserDaoImpl userDao = new UserDaoImpl();
userDao.insert(t);
List<UserVO2> l = userDao.queryByProductName("矿泉水");
System.out.println(l);
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>RedistProject</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>6</source>
<target>6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.23</version>
</dependency>
</dependencies>
</project>
四、实验结果及总结:
任务1,2(Test.java)
任务3(Test2.java)