码迷,mamicode.com
首页 > 其他好文 > 详细

jpa自定义条件分页查询

时间:2018-10-30 00:25:08      阅读:374      评论:0      收藏:0      [点我收藏+]

标签:err   override   ppi   rpo   mod   定义条件   port   get   gen   

主要依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

这里以我最近自己瞎折腾的项目部分代码为例子(仅展示主要部分):

实体类名称(Confusion)

需要注意的是

类上+ @Entity

主键字段+ @Id

 

package cn.zytao.taosir.disabuse.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import cn.zytao.taosir.common.model.disabuse.Confusion;

public interface ConfusionRepository extends JpaRepository<Confusion,String>, JpaSpecificationExecutor<Confusion>{
}

 

JpaRpository这里就不多讲了,需要注意的是,同时继承JpaSpecificationExecutor

我们发现,继承该类后,可以使用相关的API

技术分享图片

注意Specification类 

技术分享图片

通过源码可以发现这个方法,关键就是重写它了

在Service层中

    @SuppressWarnings({ "deprecation", "serial" })
    @Override
    public Page<Confusion> findByPageAndParams(Confusion params, int pageNumber, int pageSize) {
        Pageable pageable = new PageRequest(pageNumber, pageSize);
        Specification<Confusion> confusion=new Specification<Confusion>() {
            @Override
            public Predicate toPredicate(Root<Confusion> root, CriteriaQuery<?> query,
                    CriteriaBuilder criteriaBuilder) {
                Path<String> theme = root.get("theme");
                return criteriaBuilder.like(theme, "%"+params.getTheme()+"%");
            }
        };
        return confusionRepository.findAll(confusion, pageable);
    }

以上仅做参考,CriteribBuilder用于构造自定义的查询条件(即条件构造器)

 技术分享图片

通过相关的方法,我们可以采用类字符串拼接的方式,以节点把多个 criteriaBuilder 拼成一个 criteriaBuilder

之后在toPredicate方法返回即可

控制层

    public JSONObject findByParamAndPage(@RequestBody Confusion confusion, int pageNumber, int pageSize) {
        Page<Confusion> result = confusionService.findByPageAndParams(confusion, pageNumber, pageSize);
        JSONObject data=new JSONObject();
        data.put("content", result.getContent());
        data.put("totalNums", result.getTotalElements());
        data.put("totalPages",result.getTotalPages());
        return ActionHelper.responseOk(data);
    }

因为这里我的项目使用的是分布式的一个实现方式,所以这里不提供@RequestMapping,自行编写

下面看看在swagger2下的效果。

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 

 

 

 

 

 

jpa自定义条件分页查询

标签:err   override   ppi   rpo   mod   定义条件   port   get   gen   

原文地址:https://www.cnblogs.com/it-taosir/p/9874033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!