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

相关推荐
pianmian11 小时前
类(JavaBean类)和对象
java
我叫小白菜2 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言
Albert Edison2 小时前
【最新版】IntelliJ IDEA 2025 创建 SpringBoot 项目
java·spring boot·intellij-idea
超级小忍3 小时前
JVM 中的垃圾回收算法及垃圾回收器详解
java·jvm
weixin_446122463 小时前
JAVA内存区域划分
java·开发语言·redis
勤奋的小王同学~3 小时前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee
TT哇3 小时前
JavaEE==网站开发
java·redis·java-ee
2401_826097623 小时前
JavaEE-Linux环境部署
java·linux·java-ee
缘来是庄4 小时前
设计模式之访问者模式
java·设计模式·访问者模式
Bug退退退1234 小时前
RabbitMQ 高级特性之死信队列
java·分布式·spring·rabbitmq