Spring Data 2021.2 (Raj)升级说明

Spring Data 2021.2 (Raj) Release Notes

Spring Data Commons—2.7

1、 SimpleTypeInformationMapper中配置类加载器

SimpleTypeInformationMapper现在可以配置类加载器ClassLoader。确保在将类名转换为实际类对象的过程中,能够正确地使用到特定的类加载器。这样做可以应对一些复杂场景,尤其是当需要访问那些通过非默认类加载器(如自定义类加载器)加载的类时。

2、增加了类EntityProjection

3、支持属性特定值转换器

@Document(indexName = "guitars")
public record Guitar(@Id String id,@Field(type = FieldType.Keyword)@ValueConverter(ManufacturerPropertyValueConverter.class) // <-- Manufacturer manufacturer,@Field(type = FieldType.Integer)Integer year) {
}
import org.springframework.data.elasticsearch.core.convert.AbstractPropertyValueConverter;
import org.springframework.data.mapping.PersistentProperty;public class ManufacturerPropertyValueConverter extends AbstractPropertyValueConverter {public ManufacturerPropertyValueConverter(PersistentProperty<?> property) {super(property);}@Overridepublic Object write(Object value) {if (value instanceof Manufacturer m) {return m.getDisplayName();}return value;}@Overridepublic Object read(Object value) {if (value instanceof String s && Manufacturer.class.isAssignableFrom(getProperty().getType())) {var manufacturer = Manufacturer.of(s);if (manufacturer != null) {return manufacturer;}}return value;}
}

Spring Data JPA - 2.7

1、现在支持在派生查询使用DTO的情况下,创建一个select子句,该子句使用DTO类型的构造函数表达式

class CarProjection {String name;List<Color> colors;public CarProjection (String name, List<color> colors) {...}    
}class Car{String name;@OneToMany(mappedBy = "car")List<Color> colors;
}class Color{@ManyToOneCar car;
}

2、JpaRepository.getReferenceById 代替 JpaRepository.getById

引入 JpaRepository.getReferenceById 作为 JpaRepository.getById 的替代,与 JpaRepository.findById 的区别更加明显

3、解决了以 IdClass 作为主键的实体类导致的问题,以及不能与 deleteAllByIdInBatch 一起工作的bug

4、可以使用JpaSpecificationExecutor.exists来检查由Specification指定的实体是否存在。

boolean exists(Specification<T> spec)

5、 ignoreCase 操作符现在可以全面使用 lower() 函数

之前有地方用大写,有地方用消息,现在统一用小写
https://github.com/spring-projects/spring-data-jpa/issues/2420

Spring Data MongoDB - 3.4

1、更新方法

通过 @Update 注释支持修改文档,当将其添加到存储库查找器方法时,将对所有匹配的文档运行定义的表达式,并返回更新的文档的数量。

@Update("{ '$inc' : { 'visits' : ?1 } }")
long findAndIncrementVisitsByLastname(String lastname, int increment);@Update(pipeline = {"{ '$set' : { 'visits' : { '$add' : [ '$visits', ?1 ] } } }"})
long findAndIncrementVisitsViaPipelineByLastname(String lastname, int increment);@Query("{ 'lastname' : ?0 }")
@Update("{ '$inc' : { 'visits' : ?1 } }")
long updateAllByLastname(String lastname, int increment);

2、属性转换器

MongoDB数据模块利用commons模块,通过 MongoValueConverter 和 MongoConversionContext 实现了存储特定值的转换。除了使用 @ValueConverter 的声明式方法之外, MongoCustomConversions 允许编程注册仅应用于已定义的属性的转换器实现。

MongoCustomConversions.create(it -> {it.configurePropertyConversions(registrar -> {registrar.registerConverter(Person.class, "ssn", new MongoValueConverter<>() { ... });})
})

Spring Data Redis - 2.7

1、ACL支持哨兵配置

当使用Redis 6时,现在可以使用ACL身份验证对Redis Sentinel进行身份验证,除了提供哨兵密码外,还可以提供用户名。在配置用户名时,jedi和Lettuce都将可以使用ACL身份验证方法。

2、修订 RedisMessageListenerContainer

这个版本中,重写了 RedisMessageListenerContainer 关于订阅和生命周期状态转换行为的内部机制。start() 方法现在阻塞直到订阅完全建立。stop() 方法现在阻塞直到订阅完全关闭。
如果容器正在启动,并且同时注册了监听器,那么前面的实现会遇到潜在的竞争条件。竞争不会再发生,因为 start() 方法被阻止来自多个线程的并发调用,并且 start() 方法在容器完全启动后返回。因此,当在Spring上下文中使用 RedisMessageListenerContainer 时,由于同步时间延长,上下文启动/关闭阶段可能需要更长一点的时间。

Spring Data JDBC - 2.4

1、对单个聚合的多个插入将被批量处理

当聚合包含一对多关系时,引用实体的插入现在使用JDBC批处理操作执行。 仅当数据库不需要生成id或数据库支持为批量语句返回多个id时,才启用批量操作。

2、@Lock for derived queries(通过定义方法名来自动生成相应的数据库查询)

对于derived queries,现在可以使用 @Lock 注释,来获得悲观锁

interface UserRepository extends CrudRepository<User, Long> {@Lock(LockMode.PESSIMISTIC_READ)List<User> findByLastname(String lastname);
}

生成类似的查询

Select * from user u where u.lastname = lastname LOCK IN SHARE MODE

3、NULL优先级

如果底层数据库支持Null优先级,现在可以提供一个 Sort ,就像这样 Sort.by(new Sort.Order(Sort.Direction.ASC, “name”, Sort.NullHandling.NULLS_LAST))。
确定将null放在排序的最前还是最后。

4、以 @Table 注解指定模式。
@Table 注解现在提供了一个属性来指定表所在的模式。

@Table(schema = "MY_SCHEMA")
static class EntityWithSchemaFromNamingStrategy {@Id private Long id;
}

无论是否显式指定表名,都可以工作

@Table(schema = "MY_SCHEMA", name = "A_TABLE_NAME")
static class EntityWithExplicitSchema {@Id private Long id;
}

Spring Data R2DBC - 1.5

1、与R2DBC 0.9兼容
Spring Data R2DBC可与R2DBC 0.9一起使用。要使用R2DBC 0.9,需要兼容R2DBC 0.9的驱动程序,并且需要将规范接口升级到 0.9.0.RELEASE 。当使用Maven时, pom.xml 可能包含以下依赖:

<dependencies><dependency><groupId>io.r2dbc</groupId><artifactId>r2dbc-spi</artifactId><version>0.9.0.RELEASE</version></dependency><dependency><groupId>org.postgresql</groupId><artifactId>r2dbc-postgresql</artifactId><version>0.9.0.RELEASE</version></dependency></dependencies>

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

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

相关文章

【产品经理修炼之道】- 厂商银业务之保兑仓

保兑仓 保兑仓是指供应商、购货商、银行签订三方协议&#xff0c;以银行信用为载体&#xff0c;以银行承兑汇票为结算工具&#xff0c;由银行控制货权&#xff0c;供应商受托保管货物并对银行承兑汇票保证金以外部分以货物回购为担保措施&#xff0c;购货商随缴保证金随提货而设…

《QT实用小工具·二十六》运行时间记录

1、概述 源码放在文章末尾 运行时间记录&#xff0c;包含如下功能&#xff1a; 可以启动和停止服务&#xff0c;在需要的时候启动。 可以指定日志文件存放目录。 可以指定时间日志输出间隔。 可以单独追加一条记录到日志文件。 日志为文本格式&#xff0c;清晰明了。 软…

mybatis 入门

MyBatis是一款持久层框架&#xff0c;免除了几乎所有的JDBC代码、参数及获取结果集工作。可以通过简单的XML或注解来配置和映射原始类型、接口和Java POJO为数据库中的记录。 1 无框架下的JDBC操作 1&#xff09;加载驱动&#xff1a;Class.forName(“com.mysql.cj.jdbc.Driv…

AAAI24 - Model Reuse Tutorial

前言 如果你对这篇文章感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 该篇 Tutorial 主要对 Model Reuse 当下的进展进行了整理和总结。 The Paradigm Shifts Tutorial 中指出在一些数据量比较…

分布式锁-Redission快速入门

实战篇Redis 5、分布式锁-redission 5.2 分布式锁-Redission快速入门 引入依赖&#xff1a; <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version> </dependency>配置…

STM32学习和实践笔记(12):蜂鸣器实验

蜂鸣器主要分为两种&#xff0c;一种是压电式的无源蜂鸣器&#xff0c;一种是电磁式的有源蜂鸣器。 有源和无源是指其内部有没有振荡器。 无源的没有内部振荡器&#xff0c;需要输入1.5-5KHZ的音频信号来驱动压电蜂鸣片发声。 有源的内部有振荡器&#xff0c;因此只需要供给…

PostgreSQL入门到实战-第二十七弹

PostgreSQL入门到实战 PostgreSQL中数据分组操作(二)官网地址PostgreSQL概述PostgreSQL中HAVING命令理论PostgreSQL中HAVING命令实战更新计划 PostgreSQL中数据分组操作(二) 使用PostgreSQL HAVING子句来指定组或聚合的搜索条件 官网地址 声明: 由于操作系统, 版本更新等原因…

基于Python豆瓣电影数据可视化分析系统的设计与实现

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现 2024最新项目 项目介绍 本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示&#xff0c;构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据&#xff0c;我们提供了…

Docker:使用编排Compose快速部署容器化应用

1、简述 Docker Compose 是 Docker 官方提供的一个工具&#xff0c;用于定义和管理多容器应用。它通过一个简单的 YAML 文件来定义应用的服务、网络、卷等配置&#xff0c;并提供了一组命令来启动、停止、构建和管理应用。使用 Docker Compose 可以让开发人员轻松地在本地开发…

cdn加速与ssl加速

cdn CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节&#xff0c;使内容传输的更快、更稳定。 简单的来说&#xff0c;就是把原服务器上数据复制到其他服务器上&#xff0c;用户访…

蓝桥杯——松散子序列

题目 分析 很明显的动态规划问题&#xff0c;每次我们都取当前位置的最大值就可&#xff0c;从头开始&#xff0c;dp[i]max(dp[i-2],dp[i-3])num[i-3]. 代码 ninput() num[] for i in n:num.append(ord(i)-96) dp[0]*(len(num)3) for i in range(3,len(num)3):dp[i]max(dp[i…

推荐收藏!大厂 Transformer 常考面试题汇总!

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

锁策略总结

锁策略 悲观锁和乐观锁 乐观锁和悲观锁不是具体类型的锁而是指两种不同的对待加锁的态度&#xff0c;这两个锁面对锁冲突的态度是相反的。 乐观锁&#xff1a;认为不存在很多的并发操作&#xff0c;因此不需要加锁。悲观锁&#xff1a;认为存在很多并发操作&#xff0c;因此需…

什么是企微文档?怎样搭建企微文档?

企微文档作为一种高效、便捷的协作工具&#xff0c;已经有越来越多企业的在使用。那么&#xff0c;什么是企微文档&#xff1f;我们又该如何高效搭建企微文档呢&#xff1f;这就是我们今天要来探讨的问题。 | 什么是企微文档 简单来说&#xff0c;企微文档就是企业微信平台上的…

FFmpeg: 自实现ijkplayer播放器--06封装打开和关闭stream

文章目录 流程图stream openstream close流程图 stream open 初始化SDL以允许⾳频输出;初始化帧Frame队列初始化包Packet队列初始化时钟Clock初始化音量创建解复用读取线程read_thread创建视频刷新线程video_refresh_threadint FFPlayer::stream_open(const char

ASUS华硕ROG幻13笔记本电脑GV301R工厂模式原厂OEM预装Windows11系统,恢复出厂开箱状态

适用于型号&#xff1a;GV301RC、GV301RE、GV301RA 工厂模式安装包&#xff1a;https://pan.baidu.com/s/1gLme1VqidpUjCLocgm5ajQ?pwddnbk 提取码&#xff1a;dnbk 工厂模式Win11安装包带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志…

JavaScript 高阶函数小结

JavaScript 高阶函数小结 js的函数其实都是指向某个变量&#xff0c;既然变量可以指向函数&#xff0c;函数的参数能接收变量&#xff0c;那么一个函数就可以接收另外一个函数作为参数&#xff0c;这种函数就称之为高阶函数。 Arr扩展有&#xff1a;forEach、map、reduce fil…

defineProperty 与 proxy 详解

目录 前言 definePropety Setters 和 Getters watch API proxy watch API 优化 Vue3.0 里为什么要用 Proxy 替代 defineProperty ? Proxy 和 Object.defineProperty 的区别&#xff1f; 前言 我们或多或少都听过“数据绑定”这个词&#xff0c;“数据绑定”的关键在于…

#新版Onenet云平台使用(ESP8266 AT指令上报数据以及公网MQTT服务器连接测试)

1.上云方式&#xff1a;MQTT 参考&#xff1a; 新版ONENET物联网开放平台ATMQTT指令连接_at指令连接onenet的mqtt-CSDN博客https://blog.csdn.net/lilbye/article/details/131770196 ESP8266-01s入门&#xff1a;AT指令讲解、上云与MQTT通信教程-物联沃-IOTWORD物联网https:…

七:ReentrantReadWriteLock —— 读写锁

目录 1、ReentrantReadWriteLock 入门1.1、概念1.2、案例1.2.1、写写互斥1.2.2 锁降级 2、ReentrantReadWriteLock 源码解析2.1、属性2.2、构造方法2.3、内部类2.4、读写状态的设计 —— 按位切割使用2.5、【写锁】加锁方法 lock() —— ReentrantReadWriteLock.WriteLock2.4.1…