最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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實(shí)現(xiàn)從PLC讀取數(shù)據(jù)的常見主流且可行方案

    Java實(shí)現(xiàn)從PLC讀取數(shù)據(jù)的常見主流且可行方案

    要從PLC讀取數(shù)據(jù),Java本身并不直接支持PLC的通信協(xié)議,所以你需要借助一些中間件或庫來實(shí)現(xiàn),以下是幾種主流且可行的方案,大家可以根據(jù)自己的需要進(jìn)行選擇
    2026-03-03
  • SpringBoot使用Prometheus實(shí)現(xiàn)監(jiān)控

    SpringBoot使用Prometheus實(shí)現(xiàn)監(jiān)控

    在當(dāng)今的軟件開發(fā)世界中,監(jiān)控是至關(guān)重要的一部分,本文主要介紹了如何在Spring Boot應(yīng)用程序中使用Prometheus進(jìn)行監(jiān)控,以幫助大家更好地理解和管理您的應(yīng)用程序,有需要的可以參考下
    2023-10-10
  • Java中Stream流Map分組方式詳細(xì)匯總

    Java中Stream流Map分組方式詳細(xì)匯總

    Stream將要處理的元素集合看作一種流,在流的過程中借助Stream?API對(duì)流中的元素進(jìn)行操作,比如篩選、排序、聚合等,下面這篇文章主要給大家介紹了關(guān)于Java中Stream流Map分組方式的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Java Socket使用加密協(xié)議進(jìn)行傳輸對(duì)象的方法

    Java Socket使用加密協(xié)議進(jìn)行傳輸對(duì)象的方法

    這篇文章主要介紹了Java Socket使用加密協(xié)議進(jìn)行傳輸對(duì)象的方法,結(jié)合實(shí)例形式分析了java socket加密協(xié)議相關(guān)接口與類的調(diào)用方法,以及服務(wù)器、客戶端實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • Java壓縮文件操作詳解

    Java壓縮文件操作詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言進(jìn)行壓縮文件操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • Jvm?sandbox?mock機(jī)制的實(shí)踐過程

    Jvm?sandbox?mock機(jī)制的實(shí)踐過程

    這篇文章主要介紹了Jvm?sandbox?mock機(jī)制的實(shí)踐過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 淺談Java中IO和NIO的本質(zhì)和區(qū)別

    淺談Java中IO和NIO的本質(zhì)和區(qū)別

    IO的全稱是input output,是java程序跟外部世界交流的橋梁,IO指的是java.io包中的所有類,他們是從java1.0開始就存在的。NIO叫做new IO,是在java1.4中引入的新一代IO。IO的本質(zhì)是什么呢?它和NIO有什么區(qū)別呢?我們?cè)撛趺磳W(xué)習(xí)IO和NIO呢?看完這篇文章一切都有答案。
    2021-06-06
  • Java中四種訪問權(quán)限資料整理

    Java中四種訪問權(quán)限資料整理

    這篇文章主要介紹了 Java中四種訪問權(quán)限總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • SpringBoot集成MaxCompute的示例代碼

    SpringBoot集成MaxCompute的示例代碼

    這篇文章主要介紹了SpringBoot集成MaxCompute的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Java中的static靜態(tài)變量、靜態(tài)方法超詳細(xì)講解

    Java中的static靜態(tài)變量、靜態(tài)方法超詳細(xì)講解

    Java中的static關(guān)鍵字用于表示靜態(tài)變量和靜態(tài)方法,靜態(tài)變量是類的成員變量,它們屬于類本身,而不是類的實(shí)例,這篇文章主要給大家介紹了關(guān)于Java中static靜態(tài)變量、靜態(tài)方法詳細(xì)講解的相關(guān)資料,需要的朋友可以參考下
    2024-06-06

最新評(píng)論

商都县| 孟州市| 宜城市| 西和县| 宝山区| 紫云| 威远县| 阿尔山市| 措美县| 秦安县| 于田县| 英山县| 佛教| 喀喇沁旗| 孟连| 安多县| 铅山县| 怀集县| 承德县| 临西县| 三亚市| 曲阳县| 屏山县| 望城县| 连江县| 明星| 漳浦县| 星子县| 湟源县| 云南省| 沛县| 嵊州市| 西昌市| 华安县| 古浪县| 平罗县| 和林格尔县| 东平县| 烟台市| 安新县| 甘德县|