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

相关推荐
拼搏@1 小时前
第十六天,7月10日,八股
java·mybatis
Sylvia-girl5 小时前
Java——抽象类
java·开发语言
Touper.8 小时前
Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
java·数据库·redis
m0_535064608 小时前
C++模版编程:类模版与继承
java·jvm·c++
虾条_花吹雪9 小时前
Using Spring for Apache Pulsar:Message Production
java·ai·中间件
tomorrow.hello9 小时前
Java并发测试工具
java·开发语言·测试工具
Moso_Rx9 小时前
javaEE——synchronized关键字
java·java-ee
张小洛9 小时前
Spring AOP 是如何生效的(入口源码级解析)?
java·后端·spring
DKPT9 小时前
Java设计模式之行为型模式(观察者模式)介绍与说明
java·笔记·学习·观察者模式·设计模式
追风少年浪子彦10 小时前
mapstruct与lombok冲突原因及解决方案
java·spring boot·spring·spring cloud