
上QQ阅读APP看书,第一时间看更新
2.3 CrudRepository方法详解
通过类关系图可以看到CrudRepository提供了公共的通用的CRUD方法。
2.3.1 CrudRepository interface内容

(1)保存实体方法。我们通过刚才的类关系查看其他实现类。
SimpleJpaRepository里面的实现方法:

我们发现它是先检查传进去的实体是不是存在,然后判断是新增还是更新;是不是存在两种根据机制,一种是根据主键来判断,另一种是根据Version来判断(后面讲解Version的时候详解)。如果我们去看JPA控制台打印出来的SQL,最少会有两条,一条是查询,一条是insert或者update。
(2)批量保存。原理和步骤(1)相同。实现方法就是for循环调用上面的save方法。
(3)根据主键查询实体。
(4)根据主键判断实体是否存在。
(5)查询实体的所有列表。
(6)根据主键列表查询实体列表。
(7)查询总数。
(8)根据主键删除。我们通过刚才的类关系查看其他实现类。
SimpleJpaRepository里面的实现方法:

我们看到JPA会先去查询一下,再做保存,不存在抛出异常。
这里特别强调一下delete和save方法,因为在实际工作中有的人会画蛇添足,自己先去查询再做判断处理,其实Spring JPA底层都已经考虑到了。
2.3.2 CrudRepository interface的使用示例
使用也很简单,只需要自己的Repository继承CrudRepository即可。
第1章的示例我们修改如下:UserCrudRepository继承CrudRepository。

第1章的示例UserController修改如下:

然后启动运行就可以直接看效果了。