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抽象层。
相关推荐
天天向上杰几秒前
简识JVM的栈帧优化共享技术
java·jvm
方圆想当图灵19 分钟前
缓存之美:万文详解 Caffeine 实现原理(下)
java·redis·缓存
栗豆包34 分钟前
w175基于springboot的图书管理系统的设计与实现
java·spring boot·后端·spring·tomcat
等一场春雨1 小时前
Java设计模式 十四 行为型模式 (Behavioral Patterns)
java·开发语言·设计模式
萧若岚2 小时前
Elixir语言的Web开发
开发语言·后端·golang
Channing Lewis2 小时前
flask实现重启后需要重新输入用户名而避免浏览器使用之前已经记录的用户名
后端·python·flask
Channing Lewis2 小时前
如何在 Flask 中实现用户认证?
后端·python·flask
酱学编程2 小时前
java中的单元测试的使用以及原理
java·单元测试·log4j
我的运维人生2 小时前
Java并发编程深度解析:从理论到实践
java·开发语言·python·运维开发·技术共享
一只爱吃“兔子”的“胡萝卜”3 小时前
2.Spring-AOP
java·后端·spring