项目结构:

这里主要提供测试类里面地代码逻辑和redis地存储信息显示,之前基本的User,UserMapper,UserService还有数据库地准备可以看上一篇文章。

整个测试类地代码如下:

package com.example.demo;

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.google.gson.Gson;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import redis.clients.jedis.Jedis;

import java.time.LocalDateTime;

import static net.sf.jsqlparser.util.validation.metadata.NamedObject.user;
import static org.junit.jupiter.api.Assertions.assertNotNull;

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private UserMapper userMapper;

//    // 常量USER_KEY用于存储用户信息的key
//    private static final String USER_KEY = "user";

    // 假设这是你存储用户数据到Redis时使用的键的前缀,实际可以根据业务逻辑调整
    private static final String USER_KEY_PREFIX = "user:";


//    @Test
//    public void demo001(){
//        // 借助Jedis,只需一行代码就能连接到Redis
//        // 参数为主机名、端口号
//        try (Jedis jedis = new Jedis("localhost", 6379)) {
//            // 初始化一个用于序列化、反序列化的gson类(google json)
//            Gson gson = new Gson();
//
//            User user = new User("IQ50zzz", 24);
//            // 存储键值对用set方法
//            jedis.set(USER_KEY, gson.toJson(user));
//            // 读取键值对用get方法
//            User userFromRedis = gson.fromJson(jedis.get(USER_KEY), User.class);
//
//            System.out.println("get:" + userFromRedis);
//
//            System.out.println("exists:" + jedis.exists(USER_KEY));
//            System.out.println("del:" + jedis.del(USER_KEY));
//            System.out.println("get:" + jedis.get(USER_KEY));
//        }
//    }


//    @Test
//    public void test01_select_redis() {
//        // 1. 从数据库中查询用户数据
//        //User user = userMapper.selectById(2L);
//        com.example.demo.entity.User user = userMapper.selectById(2L);
//        assertNotNull(user);
//
//        // 2. 创建Jedis实例连接到Redis(这里假设Redis运行在本地默认端口6379,可根据实际调整)
//        try (Jedis jedis = new Jedis("localhost", 6379)) {
//            // 3. 创建Gson对象用于将User对象进行序列化和反序列化
//            Gson gson = new Gson();
//
//            // 4. 构造存储到Redis中的键,这里使用用户的ID作为后缀,确保键的唯一性,例如 "user:2"
//            String redisKey = USER_KEY_PREFIX + user.getId();
//
//            // 5. 将查询到的User对象序列化为JSON字符串,并存储到Redis中
//            jedis.set(redisKey, gson.toJson(user));
//
//            // 6. (可选)从Redis中读取刚存入的数据,验证是否存储成功,反序列化后进行对比
//            String storedJson = jedis.get(redisKey);
//            User userFromRedis = gson.fromJson(storedJson, User.class);
//            assertNotNull(userFromRedis);
//            // 可以进一步对比从数据库查询的user和从Redis读取的userFromRedis的各个属性是否一致,此处简单示例断言ID相等
//           // assertEquals(user.getId(), userFromRedis.getId());
//        }
//    }

//    @Test
//    public void test02_insert_redis() {
//        // 1. 创建要插入的用户对象并插入数据库
//        User userToInsert = User.builder()
//                .userName("newUserName")
//                .email("new@example.com")
//                .age(25)
//                .name("New Name")
//                .password("newPassword")
//                .build();
//        int insertResult = userMapper.insert(userToInsert);
//        //assertEquals(1, insertResult);  // 断言插入操作成功,通常插入一条记录成功返回值为1
//
//        // 2. 获取插入数据的ID,用于后续操作(这里假设插入成功后能通过对象获取到生成的主键ID)
//        Long insertedUserId = userToInsert.getId();
//        assertNotNull(insertedUserId);
//
//        // 3. 创建Jedis实例连接到Redis(这里假设Redis运行在本地默认端口6379,可根据实际调整)
//        try (Jedis jedis = new Jedis("localhost", 6379)) {
//            // 4. 创建Gson对象用于将User对象进行序列化和反序列化
//            Gson gson = new Gson();
//
//            // 5. 构造存储到Redis中的键,使用刚插入用户的ID作为后缀,确保键的唯一性,例如 "user:具体ID"
//            String redisKey = USER_KEY_PREFIX + insertedUserId;
//
//            // 6. 将插入数据库后完整的用户对象序列化为JSON字符串,并存储到Redis中
//            jedis.set(redisKey, gson.toJson(userToInsert));
//
//            // 7. (可选)从Redis中读取刚存入的数据,验证是否存储成功,反序列化后进行对比
//            String storedJson = jedis.get(redisKey);
//            User userFromRedis = gson.fromJson(storedJson, User.class);
//            assertNotNull(userFromRedis);
//        }
//    }


//    @Test
//    public void testDeleteAndSaveToRedis() {
//        // 1. 执行删除操作,获取要删除的用户ID(这里假设删除ID为1L的用户记录,可按需调整)
//        Long userIdToDelete = 2L;
//        int deleteResult = userMapper.deleteById(userIdToDelete);
//        assertNotNull(deleteResult);
//
//        // 2. 创建Jedis实例连接到Redis(假设Redis在本地默认端口6379,按需修改)
//        try (Jedis jedis = new Jedis("localhost", 6379)) {
//            // 3. 创建Gson对象用于序列化和反序列化
//            Gson gson = new Gson();
//
//            // 4. 构造包含删除记录信息的对象,这里包含被删除用户的ID以及删除操作的时间
//            DeleteRecordInfo deleteRecordInfo = new DeleteRecordInfo(userIdToDelete, LocalDateTime.now());
//
//            // 5. 构造存储到Redis中的键,使用被删除用户的ID作为后缀,保证唯一性,如 "deleted_record:1"
//            String redisKey = USER_KEY_PREFIX + userIdToDelete;
//
//            // 6. 将包含删除记录信息的对象序列化为JSON字符串,并存入Redis
//            jedis.set(redisKey, gson.toJson(deleteRecordInfo));
//
//            // 7. (可选)从Redis中读取刚存入的数据,验证是否存储成功,反序列化后对比
//            String storedJson = jedis.get(redisKey);
//            DeleteRecordInfo retrievedInfo = gson.fromJson(storedJson, DeleteRecordInfo.class);
//            assertNotNull(retrievedInfo);
//            // 简单验证读取出来的被删除用户ID是否一致(可按需扩展更多验证逻辑)
//            //assertEquals(userIdToDelete, retrievedInfo.getDeletedUserId());
//        }
//    }
//
//    // 内部类,用于封装删除记录的相关信息,可根据需求扩展更多属性
//    private static class DeleteRecordInfo {
//        private Long deletedUserId;
//        private LocalDateTime deleteTime;
//
//        public DeleteRecordInfo(Long deletedUserId, LocalDateTime deleteTime) {
//            this.deletedUserId = deletedUserId;
//            this.deleteTime = deleteTime;
//        }
//
//        public Long getDeletedUserId() {
//            return deletedUserId;
//        }
//
//        public LocalDateTime getDeleteTime() {
//            return deleteTime;
//        }
//    }


    @Test
    public void testUpdateAndSaveToRedis() {
        // 1. 执行修改操作
        User userToUpdate = User.builder()
                .id(4L)
                .password("1277")
                .build();
        int updateResult = userMapper.updateById(userToUpdate);
        assertNotNull(updateResult);

        // 2. 创建Jedis实例连接到Redis(假设Redis在本地默认端口6379,按需修改)
        try (Jedis jedis = new Jedis("localhost", 6379)) {
            // 3. 创建Gson对象用于序列化和反序列化
            Gson gson = new Gson();

            // 4. 构造包含修改记录信息的对象,这里包含被修改用户的ID以及修改操作的时间,你可按需扩展更多信息,比如修改前的数据等
            UpdateRecordInfo updateRecordInfo = new UpdateRecordInfo(userToUpdate.getId(), LocalDateTime.now());

            // 5. 构造存储到Redis中的键,使用被修改用户的ID作为后缀,保证唯一性,如 "updated_record:4"
            String redisKey = USER_KEY_PREFIX + userToUpdate.getId();

            // 6. 将包含修改记录信息的对象序列化为JSON字符串,并存入Redis
            jedis.set(redisKey, gson.toJson(updateRecordInfo));

            // 7. (可选)从Redis中读取刚存入的数据,验证是否存储成功,反序列化后对比
            String storedJson = jedis.get(redisKey);
            UpdateRecordInfo retrievedInfo = gson.fromJson(storedJson, UpdateRecordInfo.class);
            assertNotNull(retrievedInfo);
            // 简单验证读取出来的被修改用户ID是否一致(可按需扩展更多验证逻辑)
            //assertEquals(userToUpdate.getId(), retrievedInfo.getUpdatedUserId());
        }
    }

    // 内部类,用于封装修改记录的相关信息,可根据需求扩展更多属性,比如添加修改前的用户数据等
    private static class UpdateRecordInfo {
        private Long updatedUserId;
        private LocalDateTime updateTime;

        public UpdateRecordInfo(Long updatedUserId, LocalDateTime updateTime) {
            this.updatedUserId = updatedUserId;
            this.updateTime = updateTime;
        }

        public Long getUpdatedUserId() {
            return updatedUserId;
        }

        public LocalDateTime getUpdateTime() {
            return updateTime;
        }
    }

//    @Test
//    public void test01()_select{
//        User user = userMapper.selectById(2L);
//        System.out.println(user);
//    }
//    @Test
//    public void test02_insert() {
//        User user = User.builder()
//                .userName("hhh")
//                .email("153@qq.com")
//                .age(18)
//                .name("a")
//                .password("123")
//                .build();
//        int insert = userMapper.insert(user);
//        System.out.println(insert);
//    }
//    @Test
//    public  void test03_delete(){
//        int user = userMapper.deleteById(1L);
//        System.out.println(user);
//    }
//    @Test
//    public void test04_update(){
//        User user=User.builder()
//                .id(2L)
//                .password("1277")
//                .build();
//        //根据主键id来修改数据库的信息,如果这个对象的成员变量值为null,就不修改数据库的字段名
//        int i = userMapper.updateById(user);
//        System.out.println(i);
//    }
}

这里面前四个@Test代码是结合redis地,就是将增删改查地信息存储到redis中,方便记录。下面4个@Test代码是上一篇文章执行地最基础的对数据库进行增删改查。

首先大家需要下载一个redis地安装包:

用win+r来启动终端,输入下面这条语句,括号里面地是你下载安装包后解压地地址(因为你得进去,然后启动里面地redis_cli):

 启动redis_cli:

输入keys *,可以查看键值对,这个之后可以通过它来判断你地增删改查信息是否存进去了:

 

当我们执行第一个测试时:test_select_redis:

第二个测试:test_insert_redis:

 

第三个删除测试时:

 

 第四个修改测试:

如果大家觉得链接终端输入keys比较麻烦,那可以下载一个redis管理器,可以很直观的看到所有地keys和value:

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐