65、Spring Data 介绍

★ Spring Data的价值

复制代码
高度统一:只需要一套API: Spring Data,可以同时访问SQL数据和NoSQL数据库。

真正掌握Spring Data之后,你可以做到随心所欲地访问任意的SQL数据库和NoSQL数据库。

开发者:只需要面向通用的Spring Data API编程,程序就可以自由地在各种SQL或NoSQL技术之间切换。

★ Spring Data及其子项目

复制代码
从结构上来说,Spring Data相当于是一个总的项目,Spring Data包括如下子项目:
Spring Data JDBC:Spring Data对传统JDBC的封装。
Spring Data JPA:Spring Data对JPA的封装。
Spring Data MongoDB:Spring Data对MongoDB的封装。
Spring Data Redis:Spring Data对Redis的封装。

...

从逻辑关系上来说,Spring Data相当于Spring Data Xxx子项目的抽象层,而Spring Data Xxx是具体实现。
实际上Spring Data还包括一个Spring Data Commons子项目,该子项目就是Spring Data的通用抽象层。


习惯:常常所说的,面向Spring Data编程,其实是面向Spring Data Commons子项目编程,
该子项目才是Spring Data的通用抽象层。

★ 强大的Spring Data

复制代码
▲ 从代码简化的角度来说,DAO组件(官方叫Repository组件)的各种通用CRUD方法完全不需要开发者编写任何代码,
   Spring Data能通过动态代理的方式动态地生成CRUD方法。
   
   如果你要简单,Spring Data说:OK,你不需要写任何代码。我就能帮你搞定通用的CRUD操作。

▲ 从功能强大的角度来说,Spring Data既允许开发者自定义SQL或NoSQL查询语句来执行查询、从而优化查询。
   
   如果你要优化SQL语句,Spring Data说:OK,你只要用注解提供SQL语句,剩下的查询过程我就能帮你搞定。

▲ 也允许开发者直接调用相应技术的底层API来实现数据访问,完全是鱼和熊掌可以得兼。

   如果你要完全接管数据库访问方法的代码实现,Spring Data说:OK,剩下的交给你了。

★ Repository接口

DAO组件(官方叫Repository组件),没什么区别,名字不一样而已。

复制代码
▲ Repository接口是Spring Data通用抽象层的核心API,所有DAO组件都应该继承它或它的子接口。

Repository接口派生了如下两个子接口:
- CrudRepository:主要提供了各种CRUD方法,继承该接口的DAO组件不用编写任何代码
                   就可执行各种通用的CRUD数据访问及各种数据查询 。
- ReactiveCrudRepository:类似于CrudRepository接口,只不过它的方法都是反应式的,
                   因此它的方法的返回值都是Mono或Flux。

PagingAndSortingRepository  接口继承了CrudRepository接口,增加了分页和排序功能。
                                                     (额外增加了分页和排序的方法)
       ------补充一点,其实CrudRepository本身也可做分页和排序(通过传入额外参数),
           因此实际上CrudRepository用得更多一些。


ReactiveSortingRepository  接口则继承了ReactiveCrudRepository接口,
                         它相当于PagingAndSortingRepository的反应式版本。
ReactiveSortingRepository  这个是反应式 API ,就是那个 webFlux ,不需要做分页,
因为这种反应式的API,拿到的不是数据,拿到的是 Flux(集合数据用这个接收) 或者是 Mono(单个数据用这个接收) ,
Flux 里面有方法可以每次批量获取一定量的数据,所以也不需要分页。

★ 具体Repository接口

复制代码
前面4个XxxRepository属于Spring Data Commons子项目,属于Spring Data的通用抽象层,
如果让DAO组件继承它们,这样DAO组件的底层就可以在任意持久化技术、甚至任意数据存储技术
(不管是SQL数据库也好,还是NoSQL数据库也好)之间自由切换。

四个是这几个:CrudRepository、ReactiveCrudRepository
             PagingAndSortingRepository  、ReactiveSortingRepository  

此外,各Spring Data Xxx子项目也提供了对应的XxxRepository,比如:
Spring Data JPA 提供了 JpaRepository、
Spring Data MongoDB 提供了 MongoRepository......

这些针对特定技术的Spring Data Xxx子项目提供的XxxRepository都是PagingAndSortingRepository
或ReactiveSortingRepository的子接口。


一般,并不建议面向XxxRepository接口编程,因为这种接口是属于Spring Data Xxx子项目。不是Spring Data抽象层。
相关推荐
一粒沙白猫几秒前
Java综合练习04
java·开发语言·算法
凌辰揽月8 分钟前
8分钟讲完 Tomcat架构及工作原理
java·架构·tomcat
笑醉踏歌行14 分钟前
idea应用代码配色网站
java·ide·intellij-idea
一入JAVA毁终身16 分钟前
处理Lombok的一个小BUG
java·开发语言·bug
gjh120828 分钟前
Easy-excel监听器中对批量上传的工单做错误收集
java·spring boot
红衣女妖仙31 分钟前
JXLS 库导出复杂 Excel
java·excel·jxls·java 导出 excel
绝无仅有36 分钟前
对接三方SDK开发过程中的问题排查与解决
后端·面试·架构
Hellyc38 分钟前
JAVA八股文:异常有哪些种类,可以举几个例子吗?Throwable类有哪些常见方法?
java·开发语言
西岭千秋雪_1 小时前
Redis缓存架构实战
java·redis·笔记·学习·缓存·架构
五岳1 小时前
深入研究使用DozerMapper复制List<Ojbect>前后元素类型不一致的问题
java·爬坑