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抽象层。
相关推荐
南宫生3 分钟前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石11 分钟前
12/21java基础
java
李小白6619 分钟前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp32 分钟前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
装不满的克莱因瓶1 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
n北斗1 小时前
常用类晨考day15
java
骇客野人1 小时前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言
AskHarries2 小时前
Spring Cloud OpenFeign快速入门demo
spring boot·后端
yuanbenshidiaos2 小时前
c++---------数据类型
java·jvm·c++
向宇it2 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎