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抽象层。
相关推荐
P.H. Infinity7 分钟前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天11 分钟前
java的threadlocal为何内存泄漏
java
caridle22 分钟前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^27 分钟前
数据库连接池的创建
java·开发语言·数据库
苹果醋331 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花36 分钟前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端38 分钟前
第六章 7.0 LinkList
java·开发语言·网络
Wx-bishekaifayuan1 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
全栈开发圈1 小时前
新书速览|Java网络爬虫精解与实践
java·开发语言·爬虫