SSM整合(四)

news2024/12/24 9:11:13

SSM整合之redis设置值和获取值三种方式

准备工作(导入一些必要的依赖)

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>2.4.1</version>
</dependency>
<!-- java redis 客户端 -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
</dependency>
<!-- json工具包 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.75</version>
</dependency>

1.JDK序列化器

1.1 特点

默认的,必须实现序列化接口,可读性差(redis的可视化界面)

1.2 实例代码

1.2.1 实体类Emp类

package com.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import tk.mybatis.mapper.annotation.KeySql;

import javax.persistence.Id;
import java.io.Serializable;

@AllArgsConstructor
@NoArgsConstructor
@Data
//属性必须是引用数据类型 数据库Null值 动态sql都是判断属性是否为空
public class Emp implements Serializable{

    @Id
    //导入的是javax.persistence下的
    @KeySql(useGeneratedKeys = true)//主键回填
    private Integer empno;
    private String ename;
    private String mgr;
    private String job;
    private String hiredate;
    private Double sal;
    private Double comm;
    private Integer deptno;
    private static final long serialVersionUID = 1L;
}

1.2.2 创建RedisConfig类

package com.config;

import com.fasterxml.jackson.databind.ser.std.StringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration//等同于xml文件
public class RedisConfig {
    @Bean
    public RedisTemplate<String,Object> redisTemplate(JedisConnectionFactory cf){
        RedisTemplate<String, Object> redis = new RedisTemplate<>();
        //①设置连接对象
        redis.setConnectionFactory(cf);
        //1JDK序列化器 默认的 必须实现序列化接口 可读性差
        //② new一个jdk序列化器对象
        JdkSerializationRedisSerializer jdk = new JdkSerializationRedisSerializer();
        //③设置redis的存储普通数据时的键为jdk方式存储,值为jdk方式存储
        redis.setKeySerializer(jdk);
        redis.setValueSerializer(jdk);
        return redis;
    }
}

1.2.3 注入RedisTemplate类

@Autowired
RedisTemplate redisTemplate;

1.2.4 测试代码

@Test
    public void t(){
        Emp emp = em.selectByPrimaryKey(7369);
        redisTemplate.opsForValue().set("emp:7369",emp);
        Emp e = (Emp) redisTemplate.opsForValue().get("emp:7369");
        System.out.println("取出来的值: "+emp);
    }

1.2.5 测试运行截图

a redis可视化工具展示

在这里插入图片描述

b 控制台打印结果展示

在这里插入图片描述

2.String序列化器

2.1 特点

String序列话器 存储数据必须是String类型
查询到的数据需要通过fastjson中的JSON.toJSONString设置进去

2.2 实例代码

2.2.1 实体类Emp类

package com.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import tk.mybatis.mapper.annotation.KeySql;

import javax.persistence.Id;
import java.io.Serializable;

@AllArgsConstructor
@NoArgsConstructor
@Data
//属性必须是引用数据类型 数据库Null值 动态sql都是判断属性是否为空
public class Emp{

    @Id
    //导入的是javax.persistence下的
    @KeySql(useGeneratedKeys = true)//主键回填
    private Integer empno;
    private String ename;
    private String mgr;
    private String job;
    private String hiredate;
    private Double sal;
    private Double comm;
    private Integer deptno;
}

2.2.2 创建RedisConfig类

package com.config;

import com.fasterxml.jackson.databind.ser.std.StringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration//等同于xml文件
public class RedisConfig {
    @Bean
    public RedisTemplate<String,Object> redisTemplate(JedisConnectionFactory cf){
        RedisTemplate<String, Object> redis = new RedisTemplate<>();
        //① 设置连接对象
        redis.setConnectionFactory(cf);
        //② String序列话器 存储数据必须是String类型
        StringRedisSerializer string=new StringRedisSerializer();
        //③设置redis的存储普通数据时的键为string方式存储,值为string方式存储
        redis.setKeySerializer(string);
        redis.setValueSerializer(string);
        return redis;
    }
}

2.2.3 注入RedisTemplate类

@Autowired
RedisTemplate redisTemplate;

2.2.4 测试代码

  @Test
    public void t(){
        Emp emp = em.selectByPrimaryKey(7369);
        String s= JSON.toJSONString(emp);
        redisTemplate.opsForValue().set("emp:7369",s);
        String s1 = (String) redisTemplate.opsForValue().get("emp:7369");
        Emp emp1 = JSON.parseObject(s1, Emp.class);
        System.out.println("取出来的值: "+emp1);
    }

2.2.5 测试运行截图

a redis可视化工具展示

在这里插入图片描述

b 控制台打印结果展示

在这里插入图片描述

3.GenericJackson2JsonRedisSerializer

3.1 特点

GenericJackson2JsonRedisSerializer不需要序列化 可以存储任意对象 自动转换

3.2 实例代码

3.2.1 实体类Emp类

package com.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import tk.mybatis.mapper.annotation.KeySql;

import javax.persistence.Id;
import java.io.Serializable;

@AllArgsConstructor
@NoArgsConstructor
@Data
//属性必须是引用数据类型 数据库Null值 动态sql都是判断属性是否为空
public class Emp{
    @Id
    //导入的是javax.persistence下的
    @KeySql(useGeneratedKeys = true)//主键回填
    private Integer empno;
    private String ename;
    private String mgr;
    private String job;
    private String hiredate;
    private Double sal;
    private Double comm;
    private Integer deptno;
}

3.2.2 创建RedisConfig类

package com.config;

import com.fasterxml.jackson.databind.ser.std.StringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration//等同于xml文件
public class RedisConfig {
    @Bean
    public RedisTemplate<String,Object> redisTemplate(JedisConnectionFactory cf){
        RedisTemplate<String, Object> redis = new RedisTemplate<>();
        //① 设置连接对象
        redis.setConnectionFactory(cf);
        //.GenericJackson2JsonRedisSerializer不需要序列化 可以存储任意对象 自动转换
        //② 实例化GenericJackson2JsonRedisSerializer对象
        GenericJackson2JsonRedisSerializer gjj=new GenericJackson2JsonRedisSerializer();
        //③设置redis的存储普通数据时的键为GenericJackson2JsonRedisSerializer方式存储
        //值为GenericJackson2JsonRedisSerializer方式存储
        redis.setKeySerializer(gjj);
        redis.setValueSerializer(gjj);
        return redis;
    }
}

3.2.3 注入RedisTemplate类

@Autowired
RedisTemplate redisTemplate;

3.2.4 测试代码

@Test
    public void t(){
        Emp emp = em.selectByPrimaryKey(7369);
        redisTemplate.opsForValue().set("emp:7369",emp);
        Emp emp1 = (Emp) redisTemplate.opsForValue().get("emp:7369");
        System.out.println("取出来的值: "+emp1);
    }

3.2.5 测试运行截图

a redis可视化工具展示

在这里插入图片描述

b 控制台打印结果展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ES6 入门教程 19 Generator 函数的语法 19.1 简介

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程19 Generator 函数的语法19.1 简介19.1.1 基本概念19.1.2 yield 表达式19.1.3 与 Iterator 接口的关系19 Generator 函数的语…

Espressif-IDE ESP32 LED Flash 闪烁工程的创建

前言 Espressif-IDE 类似于 eclipse 开发环境&#xff0c;更新 ESP32的开发环境后&#xff0c;发现可以直接使用 Espressif-IDE 进行ESP32 的工程代码开发、程序下载&#xff0c;非常的方便 本篇开始把 ESP32的开发板的LED 点亮&#xff0c;熟悉下 Espressif-IDE 的开发流程 …

MySQL表的高级增删改查

文章目录一、聚合查询二、分组查询三、联合查询内连接外连接自连接四、合并查询五、子查询一、聚合查询 聚合查询是针对行与行之间的计算&#xff0c;常见的聚合函数有: 函数作用COUNT(expr)查询数据的数量SUM(expr)查询数据的总和AVG(expr)查询数据的平均值MAX(expr)查询数据…

ES6 入门教程 18 Iterator 和 for...of 循环 18.1 Iterator(遍历器)的概念

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程18 Iterator 和 for...of 循环18.1 Iterator&#xff08;遍历器&#xff09;的概念18 Iterator 和 for…of 循环 18.1 Iter…

zk中watcher机制(重补早期学习记录)

前言:补学习记录,几年前写一半丢草稿箱,突然看到,有强迫症所以补完 一、理解watcher机制 二、父节点watcher事件 连接zk客户端 ./zkCli.sh 使用help查看命令 父节点使用,stat或者get创建自己的watch事件 stat 路径 watch get 路径 watch 我们给一个不存在的节点设置一个w…

这次把怎么做好一个PPT讲清-动画篇

干货预警&#xff01; 作为一位PPT发烧友看过诸多PPT案例&#xff0c;分享几个高大上的动画效果。文末有福利&#xff01; 废话不多说&#xff0c;直接上重点&#xff0c;本文主要讲八个动画技巧&#xff0c;我们来看先目录&#xff1a; 收藏是点赞的六倍&#xff0c;各位看官…

统计学习、机器学习以及python的学习顺序是什么

前言 我是非科班出身成功转行算法的&#xff0c;我来说下我的学习路线是怎样的。&#xff08;文末送读者福利&#xff09; 1、看书学原理&#xff1a;我因为没买周志华老师的西瓜书&#xff0c;只看过李航老师的小蓝书&#xff0c;我第一遍看统计学习 方法的时候非常痛苦全是…

Monaco Editor教程(十七):代码信息指示器CodeLens配置详解

背景 有时候我们在使用VS Code编辑一个文件时 会看到这样的效果 在上述的图片中&#xff0c;1720行和1721行之间&#xff0c;有一行不属于该文件本身内容的注释。这一效果能够方便开发者快速地理解代码&#xff0c;看到代码的提交人&#xff0c;时间&#xff0c;可能还会有备…

C语言:一维数组的创建、初始化

一、一维数组的创建 数组的定义&#xff1a;在C语言中有各种数据类型&#xff0c;而每一种数据类型都有相对应的数据元素&#xff0c;这些元素可以组成一个团体&#xff0c;一个集合&#xff0c;从而有了数组概念。 数组也有三要素&#xff1a;数组元素类型&#xff0c; …

双链笔记Logseq的安装指南

便民服务还是挺方便的&#xff0c;不用出小区就可以做了 本文完成于 10 月初&#xff0c;撰写时 Logseq 的版本为 v0.8.8&#xff0c;发布时的最新版本是 v0.8.11 什么是 Logseq &#xff1f; Logseq 是一个本地优先的非线性大纲笔记本&#xff0c;用于组织和共享您的个人知识库…

Win11电脑如何设置自动开机(Windows 11 2022H2)

Win11电脑如何设置自动开机 ​ 文章目录1、最先右键选择“此电脑”&#xff0c;点一下“管理”。2、随后寻找系统工具里的“任务方案程序”。3、再点一下右边的“创建基本任务”。4、名字中输入“自动开机”。5、随后选择自动开机的次数。6、然后设置我们应该自动开机的实际时间…

并发编程之Executor线程池原理与源码解读

线程 线程是调度CPU资源的最小单位&#xff0c;线程模型分为KLT模型与ULT模型&#xff0c;JVM使用的KLT模 型&#xff0c;Java线程与OS线程保持1:1的映射关系&#xff0c;也就是说有一个java线程也会在操作系统里有一个对应的线程。Java线程有多种生命状态 NEW,新建 RUNNABLE,运…

分布式架构演进过程

分布式的前提&#xff0c;我们得有多台服务器&#xff0c;那么我们需要知道世界上第一台计算机的由来&#xff0c;而第一台计算机的参考模型就是冯诺依曼模型&#xff0c;为此奠定了所有的分布式都在围绕着这个模型里面的某一块或者相互之间模块进行打交道。 搞分布式又有什么意…

【计算机毕业设计】7.健身俱乐部会籍管理系统+vue

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的…

关于clickhouse单节点部署

因为公司网络问题&#xff0c;下载clickhouse无法使用命令下载&#xff0c;所以用压缩包进行下载安装。 首先在其官网下载下载安装包 https://packages.clickhouse.com/tgz/stable/ 一共要下载四个包 clickhouse-client clickhouse-common-static clickhouse-common-static-d…

miRNA 在基因调控中的作用

MicroRNA (miRNA) 是什么&#xff1f;“micro”“mi”是微小的意思&#xff0c;顾名思义&#xff0c;miRNA 就是小的非编码 RNA&#xff0c;长度约 23 个核苷酸 (nt)&#xff0c;它在转录后的基因调控中发挥关键作用&#xff0c;包括疾病的发生、细胞分化与组织发育&#xff0c…

山东大学线性代数-1-矩阵-2

目录 1.9 初等矩阵 1.9.1 初等矩阵的定义 1.9.2 初等矩阵的性质 1.9.3 初等矩阵与初等变换的关系 1.9.4 满秩矩阵的四种等价表述 1.10 逆矩阵的定义及可逆条件 1.10.1 逆矩阵的定义 1.10.2 矩阵可逆的条件 1.10.3 二阶可逆矩阵的逆矩阵求法 1.11 逆矩阵的求法&#x…

Apollo 应用与源码分析:Apollo工程概述与AUTOSAR架构

目录 Apollo 工程概述 目录结构 软件架构 硬件架构 AUTOSAR架构 Apollo 概述 目录结构 |-cyber 消息中间件&#xff0c;替换ros作为消息层 |-docker 容器相关 |-docs 文档相关 |-modules 自动驾驶模块&#xff0c;主要的定位&#xff0c;预测&#xff0c;感知&#xf…

【Java进阶篇】第四章 异常处理

文章目录1、异常2、类Throwable3、运行时异常和编译时异常4、异常的处理5、异常导致某些代码不能被执行6、try...catch总结7、异常对象的常用方法8、try...catch和finally9、final、finally和finalize的整理区分10、如何自定义异常11、异常在实际开发中的作用12、异常与方法覆盖…

带联网功能的RFID宿舍门禁(六)-两年后的再次总结

文章首发及后续更新&#xff1a;https://mwhls.top/4066.html&#xff0c;无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评&#xff0c;非常感谢&#xff01; 带联网功能的RFID宿舍门禁 两年后又来了次总结&#xff0c…