小編這次要給大家分享的是詳解Spring Data JPA如何實現(xiàn)帶條件分頁查詢,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
目前成都創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、云浮網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。Spring Data JPA的Specification類, 是按照Eric Evans的《領(lǐng)域驅(qū)動設(shè)計》書中Specification的概念和語義來定義查詢條件的API。
使用Spring Data JPA, 我們一般將自己的dao接口繼承CrudRepository接口和JpaSpecificationExecutor接口, 由框架生成代理類來完成具體的調(diào)用, 而不用自己寫daoImpl實現(xiàn)類, 因為這兩個接口自帶了很多方法, 如果我們寫實現(xiàn)類會發(fā)現(xiàn)一上來就需要實現(xiàn)十來個方法, 比較麻煩。
其中CrudRepository接口主要負責(zé)增/刪/改的操作, JpaSpecificationExecutor接口主要負責(zé)查詢的操作, 另外, 框架還支持在dao接口的方法名上定義一些簡單的語義來進行增刪改查, 底層會對應(yīng)地做具體實現(xiàn)。
那如何封裝具體的查詢條件呢?
在service層調(diào)用dao接口從JpaSpecificationExecutor繼承的抽象查詢方法, 它就會自動讓你準(zhǔn)備相關(guān)實參, 其中Specification對象就是經(jīng)常用在條件查詢的方法的一個形參, 也就是說, 封裝查詢條件的過程轉(zhuǎn)移到service層了。
我們一般以匿名內(nèi)部類的方式new一個Specification對象, 實現(xiàn)其中的toPredicate方法, 舉個例子,
Specificationspecification = new Specification () { @Override public Predicate toPredicate(Root root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) { ... };
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。