【笔记】Spring - Spring Data 整合:SpringBoot、Redis
- 相关
- 【笔记】Spring - Spring Data JPA - https://lawsssscat.blog.csdn.net/article/details/103466076
- 资料
- hm spring data资料 单独pdf笔记
文章目录
- 整合: SpringBoot + Spring Data JPA
- 整合: Spring Data Redis
- # redis环境(docker)
- # helloworld
- 依赖
- 配置(xml)
- 配置(JavaConfig)
- # 序列化器 RedisSerializer
- # 数据类型
- string
- hash
- list
- set
- sorted set(Zset)
- # 事务
- 事务方式: 编程式 execute(SessionCallback session)
- 事务方式: 声明式 @Transactional
- # 消息传递(发布/订阅)
- redis发布订阅和mq的区别
- # Redis Repository
- # 源码: RedisTemplate
- 整合: SpringBoot + Spring Data Redis
整合: SpringBoot + Spring Data JPA
https://www.bilibili.com/video/BV1Ag41197AC/?p=37
我的代码示例: https://gitcode.net/LawssssCat/learn-spring-data/-/commit/3ecfbc502adf97bd3d2ad8c9bd106d9f0b4a6512
配置
配置项目 | 默认值 | 可选值 | 解释 |
---|---|---|---|
spring.jpa.database | 要操作的目标数据库。默认自动检测。也可以使用“databasePlatform”属性进行设置 | ||
spring.jpa.database-platform | 要操作的目标数据库名称。默认自动检测。也可以使用“database”枚举进行设置 | ||
spring.jpa.generate-ddl | false | 是否在启动时执行建表、修改字段等ddl操作。(开启后,启动时检测到没表则自动创建表、类字段改了则自动该表字段) | |
spring.jpa.hibernate.ddl-auto | none |
+ create 程序运行时创建数据库表(如果有表,先删除再创建) + update 程序运行时创建数据库表(如果有表,不会创建表) + none 不会创建表 |
功能同 spring.jpa.generate-ddl ,是其的具体实现。实际上是“hibernate.hbm2ddl.auto”属性的快捷方式。 |
spring.jpa.hibernate.naming.implicit-strategy (隐式命名策略) (影响: 生成的SQL) |
+ ImplicitNamingStrategyJpaCompliantImpl (默认)兼容JPA 2.0规范 【后面四者均继承自它】 + ImplicitNamingStrategyLegacyHbmImpl 兼容Hibernate老版本中的命名规范 + ImplicitNamingStrategyLegacyJpaImpl 兼容JPA 1.0规范 + ImplicitNamingStrategyComponentPathImpl 大部分同ImplicitNamingStrategyJpaCompliantImpl ,但是对于@Embedded等注解标志的组件处理是通过使用attributePath完成的,因此如果使用@Embedded注解时,如果要指定命名规范,可以直接继承这个类来实现 |
当一个实体对象没有显式的指明它要映射的数据库表或者列的名称时,Spring Data JPA就要为我们隐式处理。
比如: 1. 比如一个实体没有在 @Table 中的指明表名,那么表名隐式的被认为是实体名 @Entity 中的提供的名称。 2. 比如一个实体没有在 @Column 中的指明列名,那么列名隐式的被认为是该实体对应的字段名 |
|
spring.jpa.hibernate.naming.physical-strategy (显式命名策略) (影响: 生成的SQL) |
+ org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 直接映射,不会做过多的处理 + org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy (默认)表名:字段为小写,当有大写字幕的时候会添加下划线分割符号 |
通过使用 PhysicalNamingStrategy 可以实现一些固定规则(如:根据业务需要制定自己的命名规范),而不需要将表名和列名通过 @Table 和 @Column 等注解显式指定。
⚠️无论对象模型中是否显式地指定列名或者已经被隐式决定,PhysicalNamingStrategy 都会被调用。但是对于 ImplicitNamingStrategy,仅仅只有当没有显式地提供名称时才会使用,也就是说当对象模型中已经指定了 @Table 或者 @Entity 等 name 时,设置的 ImplicitNamingStrategy 并不会起作用。 |
|
spring.jpa.hibernate.use-new-id-generator-mappings | true |
是否为AUTO、TABLE和SEQUENCE使用Hibernate较新的IdentifierGenerator。 实际上是“hibernate.id.new_generator_mappings”属性的快捷方式。 |
|
spring.jpa.mapping-resources | 映射资源(相当于persistence.xml中的“mapping-file”条目) | ||
spring.jpa.open-in-view | true | 注册OpenEntityManagerInViewInterceptor。将JPA EntityManager绑定到线程以完成请求的整个处理。(保证线程不结束,数据库session不关闭) | |
spring.jpa.properties.* | 要在JPA提供程序上设置的其他本机属性 | ||
spring.jpa.show-sql | false | 是否启用SQL语句的日志记录 |
自动配置类
- JpaBaseConfiguration
- JpaRepositoriesAutoConfiguration @Import
- DataSourceAutoConfiguration
整合: Spring Data Redis
- 我的笔记代码: https://gitcode.net/LawssssCat/learn-spring-data/-/tree/redis
- 文档
- 【官方】 https://spring.io/projects/spring-data-redis#learn
redis
关于redis: https://lawsssscat.blog.csdn.net/article/details/105087326
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作高速缓存、消息队列代理。它支持字符串(String) 、哈希表(Hash)、列表(List)、集合(Set)、有序集合(sorted set)、位图、hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提高可用性、通过Redis Cluster提供自动分区。
// 连接本地的Redis服务
Jedis jedis = new Jedis("localhost", 6379);try {// 设置jedis.set("name", "lawsssscat");// 获取System.out.println(jedis.get("name"));
} finally {jedis.close();
}
与数据库相比:
对比 | 数据库 | redis |
---|---|---|
操作 | 关系型数据库(表、sql操作) | 缓存数据库(key-value、get/set操作) |
作用 | 持久化存储数据到硬盘、速度较慢 | 存储数据到缓存中、读取速度快 |
Spring Data Redis
Spring Framework是成熟的全栈Java/JEE应用程序框架。它通过使用依赖注入(IOC)、AOP和可移植服务抽象提供了一个轻量级容器和一个非侵入式编成模型。Spring Data Redis(SDR)框架通过Spring出色的基础架构支持,消除了与存储交互所需的冗余任务和样板代码,从而可以轻松编写使用Redis键值存储的Spring应用程序。
Spring Data Redis提供了如下功能:
- 连接池自动管理: 不用频繁的手动的创建/销毁redis连接
- 提供了模板类RedisTemplate供我们执行各种Redis操作、异常转换和序列化支持提供高级抽象
提供的API如下:- ValueOperations: 简单K-V操作
- SetOperations: Set类型数据操作
- ZSetOperations: zset类型数据操作
- HashOperations: 针对map类型的数据操作
- ListOperations: 针对list类型的数据操作
- 支持多个Redis驱动程序(Lettuce、Jedis)的低级抽象
- 支持Repository接口的自动实现,包括使用@EnableRedisRepositories
- 发布订阅支持,如:用于消息驱动的POJO的MessageListenerContainer
- 针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口等…参考官网: https://spring.io/projects/spring-data-redis
# redis环境(docker)
https://lawsssscat.blog.csdn.net/article/details/104166908
# helloworld
我的代码笔记: https://gitcode.net/LawssssCat/learn-spring-data/-/commit/86f864e2704464b210bb0504cd2632b99182cd96
依赖
<!-- 整合springdata-data的依赖 -->
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis -->
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId>
</dependency><!-- jedis -->
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version>
</dependency><!-- junit5 -->
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.0</version><scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.10</version><scope>test</scope>
</dependency>
配置(xml)
<beans xmlns:p="http://www.springframework.org/schema/p"><bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:use-pool="true"/><bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate" p:connection-factory-ref="jedisConnectionFactory"/></beans>
配置(JavaConfig)
https://docs.spring.io/spring-data/redis/docs/current/reference/html/#redis:template
key type operations
key bound operations
# 序列化器 RedisSerializer
我的代码笔记:
- string ── https://gitcode.net/LawssssCat/learn-spring-data/-/commit/cfcc92347eb2405ffedbbd04674f4d0ae55740c4
- json ── https://gitcode.net/LawssssCat/learn-spring-data/-/commit/4782bc45a7dcf9b9162bf22f2ab5ac550348cb78
- json(优化key) ── https://gitcode.net/LawssssCat/learn-spring-data/-/commit/ddbe0fc38d673bdb88da039ddce9fb8ec9a2ad77
spring data jpa默认使用jdk的序列化器(
【笔记】Spring - Spring Data 整合:SpringBoot、Redis相关推荐
- spring boot spring data 整合 redis redis keys * 出现 \xac\xed\x00\x05t\x00) 编码异常
spring boot 集成使用spring data时key出现 \xac\xed\x00\x05t\x00) 背景 最近在研究redis,在跑eladmin这个项目的时候,发现存储验证码的时候,把 ...
- Shiro框架学习笔记、整合Springboot、redis缓存
本笔记基于B站UP主不良人编程 目录 1.权限的管理 1.1什么是权限管理 1.2什么是身份认证 1.3什么是授权 2.什么是Shiro 3.Shiro的核心架构 3.1 S核心内容 4.shiro中 ...
- Shiro 入门笔记,整合SpringBoot,Redis
Shiro 入门笔记 视频地址:https://www.bilibili.com/video/BV1uz4y197Zm 感谢编程不良人的教程 1. 权限管理 权限管理包括用户 身份认证 和 授权 两部 ...
- Spring、SpringMVC、SpringBoot及其插件学习笔记集合(持续更新中....)
笔记目录 语言 1.MyBatis 1.1 普通用法 1.1.1 配置文件 1.1.2 mapper文件 1.2 通用mapper文件 2.Thymeleaf 2.1 命名空间 2.2 依赖 2.3 ...
- Spring Cloud Data Flow整合UAA之使用LDAP进行账号管理
我最新最全的文章都在 南瓜慢说 www.pkslow.com ,欢迎大家来喝茶! 1 前言 Spring Cloud Data Flow整合UAA的文章已经写了两篇,之前的方案是把用户信息保存在数据库 ...
- Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制
我最新最全的文章都在 南瓜慢说 www.pkslow.com ,欢迎大家来喝茶! 1 前言 关于Spring Cloud Data Flow这里不多介绍,有兴趣可以看下面的文章.本文主要介绍如何整合D ...
- MongoDB和Java(4):Spring Data整合MongoDB(XML配置)
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- MongoDB和Java(5):Spring Data整合MongoDB(注解配置)
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- 【Java 系列笔记】语法基础 + Spring + Spring MVC + SpringBoot + 数据结构
Java 强化笔记目录 Java 语言基础 Java 架构师体系课程 一些课程 前端笔记:前端学习笔记 Java 语言基础 回头补基础(此基础非小白)系列,学校教的其实真的就是一些皮毛而已,怕是连门都 ...
最新文章
- java jms过时了么_JMS Message正在从Hibernate获取过时的数据
- TCP/IP详解--第三章
- 十分钟学习自然语言处理概述
- Visual C++——黄维通《 Visual C++面向对象与可视化程序设计》——习题7-12
- jenkins使用docker部署web应用
- html 载入中,用纯CSS实现加载中动画效果
- 文献记录(part22)--Learning local metrics from pairwise similarity data
- C#验证IP是否为局域网地址的三种方法
- dotnetCore增加MiddleWare的Run,Use Map MapThen四个扩展方法
- python有趣函数_python中有趣的函数
- sysbench在美团点评中的应用
- 操作系统学习总结(超赞!!!)
- 文档 hbase_0783-6.2.0-如何在Hue中集成HBase
- 西门子for循环例子_理解JavaScript中的循环缺陷和迭代协议
- 算法第四版 课后习题答案
- 【计算机组成原理】计算机的发展及应用
- 科比生涯数据分析——利用随机森林进行分类
- 在VSCode中使用CUDA
- python爬虫 笔趣阁
- 一键刷入twrp_红米Note8Pro最简单一键获取ROOT权限教程-管理自启更省电