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