jpa自定义条件分页查询

主要依赖

<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下的效果。

 

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

时间: 2024-10-09 06:55:20

jpa自定义条件分页查询的相关文章

bos 第4 (区域excel批量导入、区域通用分页查询、分区的添加、分区多条件分页查询、分区导出excel)

BOS项目笔记 第4天 今天内容安排: 1.区域批量导入功能 jQuery OCUpload(一键上传插件).apache POI.pinyin4j 2.实现区域的分页查询 3.对分页代码重构 4.添加分区(combobox下拉框) 5.分区的组合条件分页查询 6.分区数据导出功能 1. 区域数据批量导入功能 1.1 一键上传插件使用 ajax不能做文件上传. 第一步:在jsp页面中引入插件的js文件 <script type="text/javascript" src=&quo

框架 day50 BOS项目 4 批量导入(ocupload插件,pinyin4J)/POI解析Excel/Combobox下拉框/分区组合条件分页查询(ajax)/分区数据导出(Excel)

知识点: 批量导入(ocupload插件,pinyin4J /POI解析Excel(apache POI) /区域分页查询 /Combobox下拉框 /分区组合条件分页查询(ajax) /分区数据导出(Excel下载) BOS项目笔记第4天 1.    区域批量导入功能 *Ajax不支持文件上传. *上传并且不刷新上传页面原理: Target到一个0,0,0的隐藏iframe里,造成一个没有刷新的假象 <form target="myIframe" action="ab

JPA分页查询与条件分页查询

情有独钟的JPA 平时在写一些小项目时,比较喜欢引用 Spring Data Jpa,其实还是图他写代码快~在日常的开发工作中,分页列表查询基本是随处可见,下面一起看一下如何使用 jpa 进行多条件查询以及查询列表分页呢? 关于JPA的使用 关于 jpa 的使用,下面2步简单过一下,详细资料,小伙伴自行搜索一下吧~ 1.导入依赖 <dependency>    <groupId>org.springframework.boot</groupId>    <arti

spring jpa 带参数分页查询(一)

1.写个接口继承JpaRepository @NoRepositoryBean public interface BaseRepository<T,PK extends Serializable> extends JpaRepository<T,PK> { } 2.JpaRepository内部已经有好多接口,看到已经继承了PagingAndSortingRepository @NoRepositoryBean public interface JpaRepository<T

EasyUi+Spring Data 实现按条件分页查询

Spring data 介绍 Spring data 出现目的 为了简化.统一 持久层 各种实现技术 API ,所以 spring data 提供一套标准 API 和 不同持久层整合技术实现 . 自己开发 Repository 只需要继承 JpaRepository 接口CrudRepository save. delete. deteleAll. findAll. findOne. countPagingAndSortingRepositoryfindAll(Sort) 基于排序的查询. fi

IBatis按条件分页查询

XML中代码  <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"><sqlMap namespace="test">  

有条件分页查询功能实现

1. 制作查询按钮,点击按钮 显示快递员查询表单(窗口)2. 将查询窗口条件,绑定到数据表格上,让数据表格在发送请求时,自动携带条件查询 jquery easyui datagrid 数据表格 api先将页面 form 表单中数据,转换 {key:value, key:value} 格式查看 jquery 基于自定义方法,完成将 form 参数转换为 json 绑定 datagrid 上查询条件和分页查询参数 一起发送给服务器端3. 修改 CourierAction 的 pageQuery 方法

springboot jpa mongodb 多条件分页查询

public Page<Recorded> getRecordeds(Integer page, Integer size, Recorded recorded) { if (page<1){ page=1; } Sort sort = new Sort(Sort.Direction.DESC,"createTime"); Pageable pageable = new PageRequest(page-1,size,sort); Query query = new

MongoDB多条件分页查询,新增,删除操作

概述 日志信息记录到MongoDB中,然后多条件查询 程序界面 MongoDBTools.java package com.admin.utils; import java.lang.reflect.Field; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import org.apache.log4