哈尔滨理工大学

软件与微电子学院

实 验 报 告

(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)

最后修改:2021 年 05 月 11 日
如果觉得我的文章对你有用,请随意赞赏