Spring Data 2022.0 (Turing)升级说明

Spring Data 2022.0 (Turing) Release Notes

参与模块

Spring Data Build - 3.0
Spring Data Commons - 3.0
Spring Data JPA - 3.0
Spring Data Relational - 3.0
Spring Data MongoDB - 4.0
Spring Data Neo4j - 7.0
Spring Data Elasticsearch - 5.0
Spring Data Couchbase - 5.0
Spring Data for Apache Cassandra - 4.0
Spring Data for Apache Geode - 3.0
Spring Data Redis - 3.0
Spring Data REST - 4.0
Spring Data KeyValue - 3.0
Spring Data LDAP - 3.0

Spring Data Commons - 3.0

1、Spring Data现在需要Java 17作为基准

2、Spring Data现在针对Jakarta EE 10和 jakarta. 包而不是 javax. (例如 jakarta.persistence 而不是 javax.persistence )进行编译

3、新的CRUD存储库接口,返回List而不是Iterable

Spring Data提供了CRUD存储库的新接口

ListCrudRepository

ListQuerydslPredicateExecutor

ListQueryByExampleExecutor

4、Sorting repositories不再继承CRUD存储库

PagingAndSortingRepository 不再继承 CrudRepository
ReactiveSortingRepository 不再继承 ReactiveCrudRepository
CoroutineSortingRepository 不再继承 CoroutineCrudRepository
RxJavaSortingRepository 不再继承 RxJavaCrudRepository

5、规范delete方法没有删除任何记录时的返回行为

deleteById(ID id) 不应该在没有实体被删除时抛出异常

delete(T t) 如果什么都没有被删除,应该抛出一个 OptimisticLockingException

6、修改了Java Records构造函数的发现

7、移除Joda Time和ThreeTenBackport支持

Joda Time和ThreeTenBackport不再支持时态类型转换和一般操作。请使用Java内置的JSR-310时间类型 java.time 包。

8、移除对RxJava 1和2的支持

9、优化了@PageableDefault 和 @SortDefault 注解

@SortDefault 现在是可重复使用的,可以多次使用

  public Page<Notice> page(@SortDefault.SortDefaults({
      @SortDefault(sort = {"weight"}, direction = Sort.Direction.ASC),
      @SortDefault(sort = {"createTime"}, direction = Sort.Direction.DESC)})
                                 Pageable pageable) {

10、移除已弃用的公共API

被删除的API:

(1) o.s.d.convert 包中的 EntityInstantiator。使用 o.s.d.mapping.model 中的实体实例化器作为替换

(2) o.s.d.repository.support 包中的PageableExecutionUtils。被移到 o.s.d.support 包中。

(3) 移除(或封装)各种废弃的方法或构造函数,例如 Lazy 构造函数, ReactiveWrappers 上的方法等

Spring Data JPA - 3.0

1、升级到Hibernate 6

Spring Data Relational---3.0

1、Spring Data JDBC

对于使用乐观@version更新或删除0行时,现在会抛出OptimisticLockingException

2、Events and Callbacks

随着 BeforeConvertCallback 和 BeforeConvertEvent 的引入,之前可能还有使用BeforeSaveCallback的情况,现在只支持 BeforeConvertCallback 和 BeforeConvertEvent

3、Spring Data JDBC现在支持 @Query 注解和命名查询中的SpEL表达式

@Query("select u from User u where u.age = ?#{[0]}")
List<User> findUsersByAge(int age);

@Query("select u from User u where u.firstname = :#{#customer.firstname}")
List<User> findUsersByCustomersFirstname(@Param("customer") Customer customer);

具体示例地址:https://spring.io/blog/2014/07/15/spel-support-in-spring-data-jpa-query-definitions

4、外键关系的命名更改

在3.0之前,外键列名是根据实体类名来命名, 从3.0开始使用了@Table命名的表名,可以通过在 DefaultNamingStrategy 中设置 ForeignKeyNaming 来控制这种行为

5、@InsertOnlyProperty

现在可以用 @InsertOnlyProperty。以这种方式注释的属性只会在插入操作期间写入数据库,但之后不会更新。

6、 批处理操作

现在尝试批量处理SQL操作。如果JDBC驱动程序支持,这将减少对数据库的往返次数,从而提高写操作的性能。

7、Mybatis集成

如果您想在此版本中使用MyBatis,请手动向MyBatis-spring 2.1.0-SNAPSHOT或更高版本添加依赖项。

Spring Data R2DBC

1、升级到R2DBC 1.0,Spring Data R2DBC升级为R2DBC 1.0.0.RELEASE

Spring Data MongoDB - 4.0

1、升级到MongoDB Server 6.0

修改 MongoTemplate 流API,之前find 和 aggregate 操作返回的是 CloseableIterator,它允许你迭代并关闭结果集。现在MongoTemplate这些方法现在返回的是Stream流。Stream 必须在处理完毕后关闭。因此在这些情况下可以使用 try-with-resources。

try (Stream<Person> stream = mongoTemplate.stream(query, Person.class)) {
  // consume stream
}

2、增强的聚合框架支持

该版本支持MongoDB 6中新增的聚合操作符,并弥补了5.2版本中缺失的聚合操作符。操作符如 $bottom , $bottomN , $firstN , $lastN , $top 以及管道阶段如 $densify 以及更多通过java API中的专用构建器可用

DensifyOperation.builder()
    .densify("ts")
    .range(Range.bounded("2022-08-01", "2021-08-02")
    .incrementBy(1)
    .unit(HOUR)).build();

3、可观测性工具

Spring Data MongoDB为MongoDB驱动提供了测微工具,用于在MongoDB交互期间收集观测值。 一旦集成完成,Micrometer会为每个MongoDB操作创建meter和spans(用于分布式跟踪)。

Spring Data Redis - 3.0

1、为 GenericJackson2JsonRedisSerializer 和 Jackson2JsonRedisSerializer 提供读写自定义钩子

这两个Jackson序列化器现在都可以自定义读取和写入函数,以改进序列化行为

GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer(new ObjectMapper(),
		JacksonObjectReader.create(), (mapper, source) -> {
			return mapper.writerWithView(...).writeValueAsBytes(source);
		});

2、升级到Jedis4

Jedis4管道不能再与事务一起使用。代码可以使用管道或事务,但不能同时使用两者

3、弃用和移除

变更:

https://docs.spring.io/spring-data/redis/docs/3.0.0-M5/reference/html/#upgrading.2-to-3

删除了长期弃用的代码,如 LettucePool 、 Version 类型和 AuthenticatingRedisClient

相关推荐
APP 肖提莫1 分钟前
MyBatis-Plus分页拦截器,源码的重构(重构total总数的计算逻辑)
java·前端·算法
kirito学长-Java3 分钟前
springboot/ssm太原学院商铺管理系统Java代码编写web在线购物商城
java·spring boot·后端
爱学习的白杨树4 分钟前
MyBatis的一级、二级缓存
java·开发语言·spring
Code成立14 分钟前
《Java核心技术I》Swing的网格包布局
java·开发语言·swing
中草药z20 分钟前
【Spring】深入解析 Spring 原理:Bean 的多方面剖析(源码阅读)
java·数据库·spring boot·spring·bean·源码阅读
信徒_28 分钟前
常用设计模式
java·单例模式·设计模式
神仙别闹33 分钟前
基于C#实现的(WinForm)模拟操作系统文件管理系统
java·git·ffmpeg
小爬虫程序猿34 分钟前
利用Java爬虫速卖通按关键字搜索AliExpress商品
java·开发语言·爬虫
m0_7482567838 分钟前
SpringBoot 依赖之Spring Web
前端·spring boot·spring
组合缺一39 分钟前
Solon v3.0.5 发布!(Spring 可以退休了吗?)
java·后端·spring·solon