Spring?Data?JPA框架的核心概念與Repository接口詳解
1 核心概念
Spring Data存儲(chǔ)庫(kù)抽象的中心接口是Repository。它把要管理的實(shí)體類以及實(shí)體類的ID類型作為類型參數(shù)。這個(gè)接口主要是作為一個(gè)標(biāo)記接口,用來(lái)捕捉工作中的類型,并幫助你發(fā)現(xiàn)擴(kuò)展這個(gè)接口的接口。CrudRepository接口為被管理的實(shí)體類提供復(fù)雜的CRUD功能。
自己可以看看Repository的擴(kuò)展接口以及實(shí)現(xiàn)類 IDEA中將光標(biāo)定位在Repository.java文件中, ctrl+h快捷鍵就可以看。
類圖繼承關(guān)系如下:
CrudRepository接口
這個(gè)接口定義了一套CRUD基本操作的方法,使用起來(lái)很方便
CrudRepository接口比較強(qiáng)大的地方在于可以派生方法,什么意思, 舉個(gè)例子
you一張用戶表,如果你想按照某個(gè)字段統(tǒng)計(jì)一下數(shù)量, 這個(gè)實(shí)現(xiàn)的確非常強(qiáng)大。
public interface MemberMapper extends CustomRepository<Member, Long> { /** 派生方法按照用戶名統(tǒng)計(jì)人數(shù) */ Long countByMemberName(String username); /** 派生方法按照用戶部門(mén)號(hào)統(tǒng)計(jì)人數(shù) */ Long countByDeptId(Integer deptId); }
PagingAndSortingRepository接口
在CrudRepository之上,有一個(gè)PagingAndSortingRepository的抽象,它增加了額外的方法以方便對(duì)實(shí)體類的分頁(yè)查詢?cè)L問(wèn)
2 查詢方法
標(biāo)準(zhǔn)的CRUD功能庫(kù)通常有對(duì)底層數(shù)據(jù)存儲(chǔ)的查詢。使用Spring Data,聲明這些查詢需要4個(gè)步驟:
1】聲明一個(gè)擴(kuò)展Repository或其子接口之一的接口,并指定它應(yīng)該處理的實(shí)體類和ID類型
interface MemberRepository extends Repository<Member, Long> { … }
2】在接口中聲明查詢方法
interface MemberRepository extends Repository<Member, Long> { List<Member> findByMembername(String username); }
3】設(shè)置Spring為這些接口創(chuàng)建代理實(shí)例, 可以使用配置類或xml配置文件的方式來(lái)實(shí)現(xiàn)
通過(guò) 配置類的方式,示例如下:
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @EnableJpaRepositories public class MyConfig { }
通過(guò) xml配置文件的方式,示例如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/jpa https://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> <jpa:repositories base-package="com.kkarma.repository"/> </beans>
本示例中使用的是JPA命名空間。如果你對(duì)任何其他存儲(chǔ)使用存儲(chǔ)庫(kù)抽象,你需要將其修改成你的存儲(chǔ)模塊的對(duì)應(yīng)命名空間聲明。換句話說(shuō),你應(yīng)該把jpa換成其他的存儲(chǔ)類型,例如mongodb。
另外,請(qǐng)注意,JavaConfig配置類并不明確地配置掃描的基礎(chǔ)包,因?yàn)槟J(rèn)情況下會(huì)使用注釋類的包。要自定義要掃描的包,請(qǐng)使用數(shù)據(jù)存儲(chǔ)特定庫(kù)的 @Enable${store}Repositories-annotation 的 basePackage… 屬性之一。什么意思呢,舉例:
如果你的store類型是 mongodb, 就使用@EnableMongoRepositories
@Configuration @EnableMongoRepositories(*arrayOf("com.kkarma.repository", "com.???.???")) class PersistenceConfig : AbstractMongoConfiguration() { }
如果你的store類型是 redis, 就使用@EnableRedisRepositories
如果你的store類型是 jpa, 就使用@EnableJpaRepositories
簡(jiǎn)單配置單個(gè)package,格式如下:
@EnableJpaRepositories("com.spr.repository")
簡(jiǎn)單配置支持多個(gè)package,格式如下:
@EnableJpaRepositories({"com.cshtong.sample.repository", "com.cshtong.tower.repository"})
4】注入Repository實(shí)例并使用它
@Service public class MemberServiceImpl implements MemberService { private final MemberMapper memberMapper; public MemberServiceImpl(MemberMapper memberMapper) { this.memberMapper = memberMapper; } @Override public ApiResponse insertMember(Member member) { Member user = memberMapper.save(member); return ApiResponse.success("新增成功", user); } }
3 后續(xù)內(nèi)容介紹
我們?cè)敿?xì)解釋上面四步操作中的詳細(xì)內(nèi)容。
- 定義repository接口
- 定義查詢方法
- 創(chuàng)建Repository實(shí)例
- 為Spring Data Repository庫(kù)定制實(shí)現(xiàn)
到此這篇關(guān)于Spring Data JPA框架的核心概念與Repository接口詳解的文章就介紹到這了,更多相關(guān)Spring Data JPA核心概念內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java HashMap,TreeMap與LinkedHashMap的詳解
這篇文章主要介紹了 java HashMap,TreeMap與LinkedHashMap的詳解的相關(guān)資料,這里提供實(shí)例代碼,幫助大家學(xué)習(xí)理解 這部分的內(nèi)容,需要的朋友可以參考下2016-11-11Spring動(dòng)態(tài)添加定時(shí)任務(wù)的實(shí)現(xiàn)思路
這篇文章主要介紹了Spring動(dòng)態(tài)添加定時(shí)任務(wù)的實(shí)現(xiàn)思路,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07Servlet+MyBatis項(xiàng)目轉(zhuǎn)Spring Cloud微服務(wù),多數(shù)據(jù)源配置修改建議
今天小編就為大家分享一篇關(guān)于Servlet+MyBatis項(xiàng)目轉(zhuǎn)Spring Cloud微服務(wù),多數(shù)據(jù)源配置修改建議,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01解決springboot MultipartFile文件上傳遇到的問(wèn)題
本文給大家?guī)?lái)了解決springboot MultipartFile文件上傳遇到的問(wèn)題,解決方法超簡(jiǎn)單,感興趣的朋友參考下本文2018-08-08Java的優(yōu)先隊(duì)列PriorityQueue原理及實(shí)例分析
這篇文章主要介紹了Java的優(yōu)先隊(duì)列PriorityQueue原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Spring Boot 實(shí)例化bean如何選擇代理方式
這篇文章主要為大家介紹了Spring Boot實(shí)例化bean如何選擇代理方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Java 8中字符串拼接新姿勢(shì)StringJoiner詳解
在本篇文章里小編給大家整理了關(guān)于Java 8中字符串拼接新姿勢(shì)StringJoiner的詳解內(nèi)容,需要的朋友們參考下。2019-09-09從源碼角度簡(jiǎn)單看StringBuilder和StringBuffer的異同(全面解析)
下面小編就為大家分享一篇從源碼角度簡(jiǎn)單看StringBuilder和StringBuffer的異同(全面解析),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12