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

相关推荐
m0_7482359522 分钟前
SpringBoot:解决前后端请求跨域问题(详细教程)
java·spring boot·后端
LUCIAZZZ37 分钟前
简单说一下什么是RPC
java·网络·网络协议·计算机网络·spring cloud·rpc
嘵奇40 分钟前
最新版IDEA下载安装教程
java·intellij-idea
s_fox_1 小时前
Nginx Embedded Variables 嵌入式变量解析(4)
java·网络·nginx
Jelena157795857921 小时前
使用Java爬虫获取1688 item_get_company 接口的公司档案信息
java·开发语言·爬虫
数据小小爬虫1 小时前
Jsoup解析商品详情时,如何确保数据准确性?
java·爬虫
V+zmm101341 小时前
自驾游拼团小程序的设计与实现(ssm论文源码调试讲解)
java·数据库·微信小程序·小程序·毕业设计
坚定信念,勇往无前2 小时前
springboot单机支持1w并发,需要做哪些优化
java·spring boot·后端
丁总学Java2 小时前
`AdminAdminDTO` 和 `userSession` 对象中的字段对应起来的表格
java
m0_748240253 小时前
SpringMVC详解
java