介绍Spring Data Common里面的公用基本方法数据库
(1)Spring Data Common的Repositorypost
Repository位于Spring Data Common的lib里面,是Spring Data里面作数据库操做的最底层的抽象接口、最顶级的父类,源码里面其实什么方法都没有,仅仅起到一个标识做用。管理域类以及域类的id类型做为类型参数,此接口主要做为标记接口捕获要使用的类型,并帮助你发现扩展此接口的接口。Spring底层作动态代理的时候发现只要是它的子类或者实现类,都表明储存库操做代理
Repository的源码以下对象
有了这个类,咱们就能顺藤摸瓜,找到好多Spring Data JPA提供的基本接口和操做类,及其实现方法。这个接口定义了全部Repostory操做的实体和ID两个泛型参数。咱们不须要继承任何接口,只要继承这个接口,就可使用Spring JPA里面提供的不少约定的方法查询和注解查询。blog
(2)CrudRepository方法详解 排序
经过类关系图能够看到CrudRepository提供了公共的通用的CRUD方法。继承
CrudRepository interface内容接口
(1)保存实体方法。咱们经过刚才的类关系查看其余实现类。SimpleJpaRepository里面的实现方法源码
咱们发现它是先检查传进去的实体是否是存在,而后判断是新增仍是更新;是否是存在两种根据机制,一种是根据主键来判断,另外一种是根据Version来判断(后面讲解Version的时候详解)。若是咱们去看JPA控制台打印出来的SQL,最少会有两条,一条是查询,一条是insert或者update。it
(2)批量保存。原理和步骤(1)相同。实现方法就是for循环调用上面的save方法。
(3)根据主键查询实体。
(4)根据主键判断实体是否存在。
(5)查询实体的全部列表。
(6)根据主键列表查询实体列表。
(7)查询总数。
(8)根据主键删除。咱们经过刚才的类关系查看其余实现类。SimpleJpaRepository里面的实现方法:
咱们看到JPA会先去查询一下,再作保存,不存在抛出异常。这里特别强调一下delete和save方法,由于在实际工做中有的人会多此一举,本身先去查询再作判断处理,其实Spring JPA底层都已经考虑到了。
(3)PagingAndSortingRepository方法详解
经过类的关系图,咱们能够看到PagingAndSortingRepository继承CrudRepository全部的基本方法,它增长了分页和排序等对查询结果进行限制的基本的、经常使用的、通用的一些分页方法。
PagingAndSortingRepository interface内容
(1)根据排序取全部对象的集合。
(2)根据分页和排序进行查询,并用Page对象封装。Pageable对象包含分页和Sort对象。
PagingAndSortingRepository和CrudRepository都是Spring Data Common的标准接口,若是咱们采用JPA,那它对应的实现类就是Spring Data JPA的model里面的SimpleJpaRepository。若是是其余NoSQL的实现Mongodb,那它的实现就在Spring Data Mongodb的model里面。
(4)JpaRepository方法详解
JpaRepository到这里能够进入分水岭了,上面的那些都是Spring Data为了兼容NoSQL而进行的一些抽象封装,从JpaRepository开始是对关系型数据库进行抽象封装。从类图能够看得出来它继承了PagingAndSortingRepository类,也就继承了其全部方法,而且实现类也是SimpleJpaRepository。从类图上还能够看出JpaRepository继承和拥有了QueryByExampleExecutor的相关方法。
经过源码和CrudRepository相比较,它支持Query By Example,批量删除,提升删除效率,手动刷新数据库的更改方法,并将默认实现的查询结果变成了List。
(5)Repository的实现类SimpleJpaRepository
SimpleJpaRepository是JPA整个关联数据库的全部Repository的接口实现类。若是想进行扩展,能够继承此类,如QueryDsl的扩展,还有默认的处理机制。若是将此类里面的实现方法看透了,基本上JPA的API就能掌握大部分。同时也是Spring JPA动态代理的实现类,包括咱们后面讲的Query Method。