當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
Spring Data JPA 从入门到精通~Specification工作中的一些扩展
生活随笔
收集整理的這篇文章主要介紹了
Spring Data JPA 从入门到精通~Specification工作中的一些扩展
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Specification 工作中的一些擴(kuò)展
我們?cè)趯?shí)際工作中會(huì)發(fā)現(xiàn),如果上面的邏輯,簡(jiǎn)單重復(fù)寫(xiě)總感覺(jué)是不是可以抽出一些公用方法呢,此時(shí)引入一種工廠模式,幫我們做一些事情,可以讓代碼更加優(yōu)雅。基于 JpaSpecificationExecutor 的思路,我們創(chuàng)建一個(gè) SpecificationFactory.Java 內(nèi)容如下:
public final class SpecificationFactory {/*** 模糊查詢(xún),匹配對(duì)應(yīng)字段*/public static Specification containsLike(String attribute, String value) {return (root, query, cb)-> cb.like(root.get(attribute), "%" + value + "%");}/*** 某字段的值等于 value 的查詢(xún)條件*/public static Specification equal(String attribute, Object value) {return (root, query, cb) -> cb.equal(root.get(attribute),value);}/*** 獲取對(duì)應(yīng)屬性的值所在區(qū)間*/public static Specification isBetween(String attribute, int min, int max) {return (root, query, cb) -> cb.between(root.get(attribute), min, max);}public static Specification isBetween(String attribute, double min, double max) {return (root, query, cb) -> cb.between(root.get(attribute), min, max);}public static Specification isBetween(String attribute, Date min, Date max) {return (root, query, cb) -> cb.between(root.get(attribute), min, max);}/*** 通過(guò)屬性名和集合實(shí)現(xiàn) in 查詢(xún)*/public static Specification in(String attribute, Collection c) {return (root, query, cb) ->root.get(attribute).in(c);}/*** 通過(guò)屬性名構(gòu)建大于等于 Value 的查詢(xún)條件*/public static Specification greaterThan(String attribute, BigDecimal value) {return (root, query, cb) ->cb.greaterThan(root.get(attribute),value);}public static Specification greaterThan(String attribute, Long value) {return (root, query, cb) ->cb.greaterThan(root.get(attribute),value);} ...... }PS:可以根據(jù)實(shí)際工作需要和場(chǎng)景進(jìn)行不斷擴(kuò)充。
調(diào)用實(shí)例1:
userRepository.findAll(SpecificationFactory.containsLike("firstName", userParam.getLastName()),pageable);是不是發(fā)現(xiàn)代碼一下子少了很多?
配合 Specifications 使用,調(diào)用實(shí)例2:
userRepository.findAll(Specifications.where(SpecificationFactory.containsLike("firstName", userParam.getLastName())).and(SpecificationFactory.greaterThan("version",userParam.getVersion())),pageable);和我們前面舉的例子比起來(lái)是不是代碼更加優(yōu)雅、可讀性更加強(qiáng)了?
總結(jié)
以上是生活随笔為你收集整理的Spring Data JPA 从入门到精通~Specification工作中的一些扩展的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BigDecimal总结
- 下一篇: sys_connect_by_path