JPA实现多条件分页查询

 更新时间:2024年07月17日 09:24:20   作者:小炎说java  
这篇文章主要介绍了JPA实现多条件分页查询方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

JPA多条件分页查询

  • jpa单表自定义查询条件
  • 同时支持分页查询

分页查询准备工作

  • 1:实体类注入pageNum与pageSIze,建议pageNum为1,pageSize为100000,这样可以保证没有分页查询时,可以查询全部的数据
  • 2:默认定义好,同时需要添加@Transient,非数据库字段
public class 实体类 {

    @Transient
    private int pageNum=1;

    @Transient
    private int pageSize=10000;
|

使用分页查询

  • 1:PageRequest.of():生成带有开始页,尺寸,排序方式,排序字段的Pageable
  • 2:这里因为一开始定义的pageNum为1,需减1
  • 3:这么使用,是方便前端的设值,以及ui分页查询的
  • 4:指定排序字段,必须要带_
Pageable pageable=PageRequest.of(recruit.getPageNum()-1,recruit.getPageSize(),
                Sort.Direction.DESC,"createTime");

recruitRepository.findAll(specification,pageable);

自定义查询条件

  • 1:首先需要判定传入的值是否存在,且不为空
  • 2:时间类型为between and,需保证两个时间都不为空
  • 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多条件动态分页查询

之前发过用JPA接口动态查询,单独写了个EXT扩展类拼接sql语句,随着我入行时间的增加,我变强了,所以我在这里记录分享一个更为简单的动态分页查询方法。

废话少说,上代码了:

    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());
    }

接受参数看具体情况 ,用了拉姆达表达式,这样子然后sql直接可以用jpa内部接口就好了,简单暴力管用,无敌了!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java解析xml文件遇到特殊符号异常的情况(处理方案)

    Java解析xml文件遇到特殊符号异常的情况(处理方案)

    这篇文章主要介绍了Java解析xml文件遇到特殊符号&会出现异常的解决方案,实现思路很简单通过在读取xml文件使用SAX解析前读取reader,具体实现方法及示例代码跟随小编一起看看吧
    2021-05-05
  • 十种JAVA排序算法实例

    十种JAVA排序算法实例

    本文件讲了十种JAVA排序方法(冒泡(Bubble)排序——相邻交换 、选择排序——每次最小/大排在相应的位置 、插入排序——将下一个插入已排好的序列中 、壳(Shell)排序——缩小增量 、归并排序 、快速排序 、堆排序 、拓扑排序 、锦标赛排序 、基数排序)的使用,并提供了实例代码可参考
    2013-11-11
  • SpringBoot参数验证10个技巧值得收藏

    SpringBoot参数验证10个技巧值得收藏

    Spring Boot提供了内置的验证注解,可以帮助简单、快速地对输入字段进行验证,例如检查 null 或空字段、强制执行长度限制、使用正则表达式验证模式以及验证电子邮件地址,那么在Spring Boot应用中如何做好参数校验工作呢,本文提供了10个小技巧感兴趣的朋友一起看看吧
    2023-08-08
  • java实现爬取知乎用户基本信息

    java实现爬取知乎用户基本信息

    这篇文章主要为大家介绍了一个基于JAVA的知乎爬虫,抓取知乎用户基本信息,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 阿里四面之Spring Exception的原理解析

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

    本文给大家介绍阿里四面之Spring Exception的原理解析,本文通过错误场景分析给大家详细介绍Spring异常处理流程,感兴趣的朋友一起看看吧
    2021-10-10
  • MyBatis Plus整合Redis实现分布式二级缓存的问题

    MyBatis Plus整合Redis实现分布式二级缓存的问题

    Mybatis内置的二级缓存在分布式环境下存在分布式问题,无法使用,但是我们可以整合Redis来实现分布式的二级缓存,这篇文章给大家介绍MyBatis Plus整合Redis实现分布式二级缓存,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • 使用java实现云端资源共享小程序的代码

    使用java实现云端资源共享小程序的代码

    这篇文章主要介绍了用java写一个云端资源共享小程序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • JVM之方法返回地址详解

    JVM之方法返回地址详解

    这篇文章主要介绍了JVM之方法返回地址详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 详解springSecurity之java配置篇

    详解springSecurity之java配置篇

    这篇文章主要介绍了详解springSecurity之java配置篇,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 基于Java实现收发电子邮件功能

    基于Java实现收发电子邮件功能

    Email就是电子邮件,我们平常使用的QQ邮箱,网易邮箱,Foxmail都是用来收发邮件的,利用Java程序也可以完成收发电子邮件的功能,本文就来为大家详细讲讲实现步骤
    2022-07-07

最新评论