先看下Repository相关的项目心场类图:
整体类图虽然咋看上去很庞杂,但其实主线脉络还是中核比较清晰的。
对主体repository层级提供的项目心场主要方法进行简单的梳理 ,如下 :
下面对各个repository接口进行简单的独立介绍 。
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继承了JpaRepository,具备了其父系所有的操作接口,此外,额外扩展了业务层面自定义的一些接口方法: