欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JPA實(shí)現(xiàn)多條件分頁查詢

 更新時(shí)間:2024年07月17日 09:24:20   作者:小炎說java  
這篇文章主要介紹了JPA實(shí)現(xiàn)多條件分頁查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

JPA多條件分頁查詢

  • jpa單表自定義查詢條件
  • 同時(shí)支持分頁查詢

分頁查詢準(zhǔn)備工作

  • 1:實(shí)體類注入pageNum與pageSIze,建議pageNum為1,pageSize為100000,這樣可以保證沒有分頁查詢時(shí),可以查詢?nèi)康臄?shù)據(jù)
  • 2:默認(rèn)定義好,同時(shí)需要添加@Transient,非數(shù)據(jù)庫字段
public class 實(shí)體類 {

    @Transient
    private int pageNum=1;

    @Transient
    private int pageSize=10000;
|

使用分頁查詢

  • 1:PageRequest.of():生成帶有開始頁,尺寸,排序方式,排序字段的Pageable
  • 2:這里因?yàn)橐婚_始定義的pageNum為1,需減1
  • 3:這么使用,是方便前端的設(shè)值,以及ui分頁查詢的
  • 4:指定排序字段,必須要帶_
Pageable pageable=PageRequest.of(recruit.getPageNum()-1,recruit.getPageSize(),
                Sort.Direction.DESC,"createTime");

recruitRepository.findAll(specification,pageable);

自定義查詢條件

  • 1:首先需要判定傳入的值是否存在,且不為空
  • 2:時(shí)間類型為between and,需保證兩個(gè)時(shí)間都不為空
  • 3:JPA支持in equal like between and
  • 4:reposotory層需繼承JpaRepository,JpaSpecificationExecutor
Specification<PersonnelRecruit> specification = (root, criteriaQuery, criteriaBuilder) -> {
            List<Predicate> predicates = new ArrayList<>();
            if (StringUtils.isNotBlank(recruit.getDept())) {
                predicates.add(criteriaBuilder.equal(root.get("dept"),recruit.getDept()));
            }

            if (StringUtils.isNotBlank(recruit.getName())) {
                predicates.add(criteriaBuilder.like(root.get("name"),"%"+recruit.getName()+"%"));
            }

            if (ObjectUtils.isNotNull(recruit.getCreateTime()) && ObjectUtils.isNotNull(recruit.getCreateEndTime())) {
                predicates.add(criteriaBuilder.between(root.get("createTime"),recruit.getCreateTime(),recruit.getCreateEndTime()));
            }
            Predicate[] p = predicates.toArray(new Predicate[0]);
            return criteriaBuilder.and(p);
        };

 Pageable pageable=PageRequest.of(recruit.getPageNum()-1,recruit.getPageSize(),
                Sort.Direction.DESC,"createTime");
 return recruitRepository.findAll(specification,pageable);

JPA多條件動(dòng)態(tài)分頁查詢

之前發(fā)過用JPA接口動(dòng)態(tài)查詢,單獨(dú)寫了個(gè)EXT擴(kuò)展類拼接sql語句,隨著我入行時(shí)間的增加,我變強(qiáng)了,所以我在這里記錄分享一個(gè)更為簡單的動(dòng)態(tài)分頁查詢方法。

廢話少說,上代碼了:

    public Page<QualityTaskDto> findQualityTaskByPage(Integer pageNum, Integer pageSize, String tasktype, String jobname, String satellite) {
        Sort sort = Sort.by(Sort.Direction.ASC, "creatTime");
        Pageable pageable = new PageRequest(pageNum,pageSize,sort);
        Specification<DbDmsQualityTaskInfoDTO> specification = (root, query, cb) ->{
            List<Predicate> predicates = new LinkedList<>();
            if(StringUtils.isNotBlank(tasktype)){
                predicates.add(cb.equal(root.get("tasktype"),tasktype));
            }
            if(StringUtils.isNotBlank(jobname)){
                predicates.add(cb.like(root.get("jobname"),"%"+jobname+"%"));
            }//模糊查詢
            if(StringUtils.isNotBlank(satellite)){
                predicates.add(cb.equal(root.get("satellite"),satellite));
            }
            return cb.and(predicates.toArray(new Predicate[predicates.size()]));
        };
        Page<DbDmsQualityTaskInfoDTO> all = qualityTaskInfoDAO.findAll(specification,pageable);
        List<QualityTaskDto> qualityTaskDtos = qualityTaskDto.db2Dto(all.getContent());
        return new PageImpl<>(qualityTaskDtos,pageable,all.getTotalElements());
    }

接受參數(shù)看具體情況 ,用了拉姆達(dá)表達(dá)式,這樣子然后sql直接可以用jpa內(nèi)部接口就好了,簡單暴力管用,無敵了!

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java解析xml文件遇到特殊符號(hào)異常的情況(處理方案)

    Java解析xml文件遇到特殊符號(hào)異常的情況(處理方案)

    這篇文章主要介紹了Java解析xml文件遇到特殊符號(hào)&會(huì)出現(xiàn)異常的解決方案,實(shí)現(xiàn)思路很簡單通過在讀取xml文件使用SAX解析前讀取reader,具體實(shí)現(xiàn)方法及示例代碼跟隨小編一起看看吧
    2021-05-05
  • 十種JAVA排序算法實(shí)例

    十種JAVA排序算法實(shí)例

    本文件講了十種JAVA排序方法(冒泡(Bubble)排序——相鄰交換 、選擇排序——每次最小/大排在相應(yīng)的位置 、插入排序——將下一個(gè)插入已排好的序列中 、殼(Shell)排序——縮小增量 、歸并排序 、快速排序 、堆排序 、拓?fù)渑判?、錦標(biāo)賽排序 、基數(shù)排序)的使用,并提供了實(shí)例代碼可參考
    2013-11-11
  • SpringBoot參數(shù)驗(yàn)證10個(gè)技巧值得收藏

    SpringBoot參數(shù)驗(yàn)證10個(gè)技巧值得收藏

    Spring Boot提供了內(nèi)置的驗(yàn)證注解,可以幫助簡單、快速地對(duì)輸入字段進(jìn)行驗(yàn)證,例如檢查 null 或空字段、強(qiáng)制執(zhí)行長度限制、使用正則表達(dá)式驗(yàn)證模式以及驗(yàn)證電子郵件地址,那么在Spring Boot應(yīng)用中如何做好參數(shù)校驗(yàn)工作呢,本文提供了10個(gè)小技巧感興趣的朋友一起看看吧
    2023-08-08
  • java實(shí)現(xiàn)爬取知乎用戶基本信息

    java實(shí)現(xiàn)爬取知乎用戶基本信息

    這篇文章主要為大家介紹了一個(gè)基于JAVA的知乎爬蟲,抓取知乎用戶基本信息,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 阿里四面之Spring Exception的原理解析

    阿里四面之Spring Exception的原理解析

    本文給大家介紹阿里四面之Spring Exception的原理解析,本文通過錯(cuò)誤場景分析給大家詳細(xì)介紹Spring異常處理流程,感興趣的朋友一起看看吧
    2021-10-10
  • MyBatis Plus整合Redis實(shí)現(xiàn)分布式二級(jí)緩存的問題

    MyBatis Plus整合Redis實(shí)現(xiàn)分布式二級(jí)緩存的問題

    Mybatis內(nèi)置的二級(jí)緩存在分布式環(huán)境下存在分布式問題,無法使用,但是我們可以整合Redis來實(shí)現(xiàn)分布式的二級(jí)緩存,這篇文章給大家介紹MyBatis Plus整合Redis實(shí)現(xiàn)分布式二級(jí)緩存,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 使用java實(shí)現(xiàn)云端資源共享小程序的代碼

    使用java實(shí)現(xiàn)云端資源共享小程序的代碼

    這篇文章主要介紹了用java寫一個(gè)云端資源共享小程序,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • JVM之方法返回地址詳解

    JVM之方法返回地址詳解

    這篇文章主要介紹了JVM之方法返回地址詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 詳解springSecurity之java配置篇

    詳解springSecurity之java配置篇

    這篇文章主要介紹了詳解springSecurity之java配置篇,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 基于Java實(shí)現(xiàn)收發(fā)電子郵件功能

    基于Java實(shí)現(xiàn)收發(fā)電子郵件功能

    Email就是電子郵件,我們平常使用的QQ郵箱,網(wǎng)易郵箱,F(xiàn)oxmail都是用來收發(fā)郵件的,利用Java程序也可以完成收發(fā)電子郵件的功能,本文就來為大家詳細(xì)講講實(shí)現(xiàn)步驟
    2022-07-07

最新評(píng)論