Spring Data JPA:JPA项目中核心场景与进阶用法介绍 DATE: 2024-04-29 21:04:54
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 的相关方法 。
通过源码和 CrudRepository 相比较 ,它支持Query By Example,批量删除 ,提高删除效率,手动刷新数据库的更改方法,并将默认实现的查询结果变成了List。
额外补充一句:
实际的项目编码中,大部分的场景中,我们自定义Repository都是继承 JpaRepository 来实现的 。
自定义Repository
先看个自定义Repository的例子 ,如下 :