![Spring Data JPA从入门到精通](https://wfqqreader-1252317822.image.myqcloud.com/cover/731/26793731/b_26793731.jpg)
上QQ阅读APP看书,第一时间看更新
2.3 CrudRepository方法详解
通过类关系图可以看到CrudRepository提供了公共的通用的CRUD方法。
2.3.1 CrudRepository interface内容
![](https://epubservercos.yuewen.com/4D44C0/15253387904117506/epubprivate/OEBPS/Images/Figure-P31_2588.jpg?sign=1739214770-8qvrRZRezfcry8zOK6moDCYgbeLY0vTy-0-d0779575d4ba0b3f947ddc5d73af4893)
(1)保存实体方法。我们通过刚才的类关系查看其他实现类。
SimpleJpaRepository里面的实现方法:
![](https://epubservercos.yuewen.com/4D44C0/15253387904117506/epubprivate/OEBPS/Images/Figure-P31_2589.jpg?sign=1739214770-pWcL7f0pxAy3J8tk6BSPIjC5RRLSboN6-0-d3350706840bab9b859baf8d120f4969)
我们发现它是先检查传进去的实体是不是存在,然后判断是新增还是更新;是不是存在两种根据机制,一种是根据主键来判断,另一种是根据Version来判断(后面讲解Version的时候详解)。如果我们去看JPA控制台打印出来的SQL,最少会有两条,一条是查询,一条是insert或者update。
(2)批量保存。原理和步骤(1)相同。实现方法就是for循环调用上面的save方法。
(3)根据主键查询实体。
(4)根据主键判断实体是否存在。
(5)查询实体的所有列表。
(6)根据主键列表查询实体列表。
(7)查询总数。
(8)根据主键删除。我们通过刚才的类关系查看其他实现类。
SimpleJpaRepository里面的实现方法:
![](https://epubservercos.yuewen.com/4D44C0/15253387904117506/epubprivate/OEBPS/Images/Figure-P32_2808.jpg?sign=1739214770-FNFfuqk6M4i7JEtTwmtMdSePD9ceCWQM-0-176a2f4f97a17098da11fbf7b8b3f452)
我们看到JPA会先去查询一下,再做保存,不存在抛出异常。
这里特别强调一下delete和save方法,因为在实际工作中有的人会画蛇添足,自己先去查询再做判断处理,其实Spring JPA底层都已经考虑到了。
2.3.2 CrudRepository interface的使用示例
使用也很简单,只需要自己的Repository继承CrudRepository即可。
第1章的示例我们修改如下:UserCrudRepository继承CrudRepository。
![](https://epubservercos.yuewen.com/4D44C0/15253387904117506/epubprivate/OEBPS/Images/Figure-P32_2809.jpg?sign=1739214770-gwgU1KNC1umZt0rewoXUEbRnCOK8vBgm-0-3e9d7c2aadcf839e179cfaf5f50badc3)
第1章的示例UserController修改如下:
![](https://epubservercos.yuewen.com/4D44C0/15253387904117506/epubprivate/OEBPS/Images/Figure-P32_2810.jpg?sign=1739214770-IPKizaWxPrm03JrgxC577y03P0c7Txdv-0-34e20b2cc8d541e598bfb0bf488749c5)
然后启动运行就可以直接看效果了。