Spring Data JPA:JPA项目中核心场景与进阶用法介绍
repository全貌梳理
先看下Repository相关的项目心场类图:
整体类图虽然咋看上去很庞杂 ,但其实主线脉络还是中核比较清晰的。
- 先看下蓝色的景进阶用部分其实就是Repository的一整个接口定义链条,而橙色的法介则是我们自己自定义的一些Repository接口类,继承父层接口的项目心场所有已有能力 。
- 左侧的中核类图与接口,其实都是景进阶用JPA提供的一些用于实现或者定制查询操作的一些辅助实现类,后面章节中会看到他们的法介身影 。
对主体repository层级提供的项目心场主要方法进行简单的梳理,如下:
下面对各个repository接口进行简单的独立介绍 。
JpaRepository与它的景进阶用父类们
- Repository 位于 Spring Data Common 的lib里面 ,是法介Spring Data 里面做数据库操作的最底层的抽象接口、最顶级的项目心场父类 ,源码里面其实什么方法都没有,中核仅仅起到一个标识作用。景进阶用
- CrudRepository 作为直接继承 Repository 的次顶层接口类 ,看名字也可以大致猜测出其主要作用就是封装提供基础CRUD操作。
- PagingAndSortingRepository 继承自 CrudRepository ,自然也就具备了 CrudRepository 提供的全部接口能力。此外,从其自身新提供的接口来看 ,增加了排序和分页查询列表的能力,非常符合其类名的含义。
JpaRepository 与其前面的几个父类相比是个特殊的存在,其中补充添加了一组JPA规范的接口方法。前面的几个接口类都是Spring Data为了兼容NoSQL而进行的一些抽象封装(因为SpringData项目是一个庞大的家族 ,支持各种SQL与NoSQL的数据库 ,SpringData JPA是SpringData家族中面向SQL数据库的一个子分支项目),从 JpaRepository 开始是对关系型数据库进行抽象封装 。
从类图可以看得出来它继承了 PagingAndSortingRepository 类,也就继承了其所有方法,并且实现类也是 SimpleJpaRepository 。从类图上还可以看出 JpaRepository 继承和拥有了 QueryByExampleExecutor 的相关方法 。