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

情有独钟的JPA

平时在写一些小项目时,比较喜欢引用 Spring Data Jpa,其实还是图他写代码快~
在日常的开发工作中,分页列表查询基本是随处可见,下面一起看一下如何使用 jpa 进行多条件查询以及查询列表分页呢?

关于JPA的使用

关于 jpa 的使用,下面2步简单过一下,详细资料,小伙伴自行搜索一下吧~

1、导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>mysql、web、druid......
</dependency>

2、配置yml

图方便直接贴代码了:

spring:# 数据源datasource:url: jdbc:mysql://127.0.0.1:3306/tmax?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: 1234type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.jdbc.Driverjpa:# 操作数据库时显示sql语句show-sql: true# 自动生成表结构generate-ddl: truehibernate:ddl-auto: nonedatabase-platform: org.hibernate.dialect.MySQL57Dialect

分页查询

我们了解 jpa 基本是不用去写 sql 的,继承 JpaRepository 即可,同样也提供给了我们分页查询的方法:

举例:

Page<VideoCategory> findByCondition(SearchVo searchVo, Pageable pageable);

通过传入一个遵循 pageale 协议的对象来获取某一页的数据,通过源码查看,发现 Pageable 是一个接口,提供了分页一组方法的声明,如第几页,每页多少条记录,排序信息等,部分方法如下:

int getPageNumber();int getPageSize();int getOffset();Sort getSort();Pageable next();Pageable previousOrFirst();Pageable first();boolean hasPrevious();

通过这些方法我们可以构造我们的 pageable 对象,需要注意的是 jpa 在构造页码初始时,是从 0 开始的。

废话不多说,来看一段代码吧:

1. impl

    @Overridepublic Page<VideoCategory> findByCondition(VideoCategory videoCategory, SearchVo searchVo, Pageable pageable{return videoCategoryDao.findAll(new Specification<VideoCategory>() {@Nullable@Overridepublic Predicate toPredicate(Root<VideoCategory> root, CriteriaQuery<?> cq, CriteriaBuilder cb{// 可添加你的其他搜索过滤条件 默认已有创建时间过滤Path<Date> createTimeField=root.get("createTime");Path<String> categoryIdField=root.get("categoryId");List<Predicate> list = new ArrayList<Predicate>();//创建时间if(StrUtil.isNotBlank(searchVo.getStartDate())&&StrUtil.isNotBlank(searchVo.getEndDate())){Date start = DateUtil.parse(searchVo.getStartDate());Date end = DateUtil.parse(searchVo.getEndDate());list.add(cb.between(createTimeField, start, DateUtil.endOfDay(end)));}// 视频分类if(StrUtil.isNotBlank(videoCategory.getCategoryId())){        list.add(cb.equal(categoryIdField,videoCategory.getCategoryId()));}Predicate[] arr = new Predicate[list.size()];cq.where(list.toArray(arr));return null;}}, pageable);}

2. controller

    @RequestMapping(value = "/getByCondition", method = RequestMethod.GET)@ApiOperation(value = "多条件分页获取")public Result<Page<VideoCategory>> getByCondition(@ModelAttribute VideoCategory videoCategory,@ModelAttribute SearchVo searchVo,@ModelAttribute PageVo pageVo){Page<VideoCategory> page = videoCategoryService.findByCondition(videoCategory, searchVo, PageUtil.initPage(pageVo));return new ResultUtil<Page<VideoCategory>>().setData(page);}

3. PageUtil

public static Pageable initPage(PageVo page){Pageable pageable = null;int pageNumber = page.getPageNumber();int pageSize = page.getPageSize();String sort = page.getSort();String order = page.getOrder();if(pageNumber<1){pageNumber = 1;}if(pageSize<1){pageSize = 10;}if(StrUtil.isNotBlank(sort)) {Sort.Direction d;if(StrUtil.isBlank(order)) {d = Sort.Direction.DESC;} else {d = Sort.Direction.valueOf(order.toUpperCase());}Sort s = new Sort(d, sort);pageable = PageRequest.of(pageNumber-1, pageSize, s);} else {pageable = PageRequest.of(pageNumber-1, pageSize);}return pageable;}

posted @ 2019-05-06 00:02 niceyoo 阅读(...) 评论(...) 编辑 收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 创建文件,删除文件,加载本地txt文件,string转txt文件,创建文件夹,读取文件夹,open failed: ENOENT

1、创建文件 String fileName "my.txt"; File fs new File(Environment.getExternalStorageDirectory() "/msc/" fileName); 安卓10内存文件 String downFileDir context.getFilesDir().getAbsolutePath(); File dest new File(downFileDir, te…

Python基础44(PyMySQL模块)

PyMySQL安装方法 pip install pymysql 连接数据库 注意事项 在进行本文以下内容之前需要注意&#xff1a; 你有一个MySQL数据库&#xff0c;并且已经启动。你有可以连接该数据库的用户名和密码你有一个有权限操作的database基本使用 # 导入pymysql模块import pymysql# 链接库&a…

开箱一个docker

开箱一个docker 1、docker 的出现&#xff1f; 1.1、环境切换配置麻烦 通常我们在开发环境写好代码&#xff0c;打个war/jar包&#xff0c;扔到tomcat下&#xff0c;就算是跑起来了&#xff1b;但是扔到生产环境就挂了&#xff0c;what&#xff1f;各种错误。。。 1.2、应用之…

Android 调用系统相机拍照和录制视频,保存照片和视频

1、申请权限 <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name"android.permission.CAMERA" /> java private static final String[] authBaseArr {//申请类型Manifest.permi…

jedis jedispool Redistemplate

jedis jedispool Redistemplate 整理了之前学习 redis 的笔记&#xff0c;强烈建议看最后总结。 在大型系统数据读请求中&#xff0c;基本上90%都可以通过分布式缓存集群来抗下来&#xff0c;而 Redis 又是分布式缓存集群的主要践行者&#xff0c;因此了解 Redis 是必不可少的…

支付宝支付提示 4006 ISV权限不足,建议在开发者中心检查签约是否已经生效

解决方法非常简单&#xff1a; 1、首先登录支付宝商家中心&#xff1a;https://b.alipay.com/index.htm 查看产品中心&#xff0c;对应功能有木有开通&#xff0c;或者签约开通 2、登录支付宝开放平台&#xff1a;https://open.alipay.com/platform/home.htm 查看应用功能列…

剑指Offer-按之字形顺序打印二叉树

package Tree;import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue;/*** 请实现一个函数按照之字形打印二叉树&#xff0c;即第一行按照从左到右的顺序打印&#xff0c;第二层按照从右至左的顺序打印&#xff0c;第三行按照从左到右的顺序打印&a…

android 自定义相机,Camera,相机遮罩层

实现效果&#xff1a; 实现方法&#xff1a;一个自定义view实现demo 一、自定义相机Camera&#xff0c;无API版本限制 &#xff08;1&#xff09;。实现接口 implements SurfaceHolder.Callback private SurfaceView mView;private Camera mCamera; private int cameraId 0;/…

RedisTemplate在项目中的应用

RedisTemplate在项目中的应用 如下主要通去年无聊做的 "涂涂影院后台管理系统" 一个 demo&#xff0c;看 RedisTemplate 的使用。 主要用到地方&#xff1a;视频首页轮播图的获取&#xff0c;以及搜索检索界面&#xff0c;如下图所示&#xff1a; 由于是非maven非sp…

Android 蓝牙开发,搜索蓝牙列表,蓝牙连接,蓝牙通讯

申请打开蓝牙 <!-- 蓝牙权限 --> <uses-permission android:name"android.permission.BLUETOOTH" /> <uses-permission android:name"android.permission.BLUETOOTH_ADMIN" />private final int BLUE_REQUEST_CODE 551; public void s…

jeecg uedit 自定义图片上传路径

jeecg uedit 图片上传配置自定义物理路径&#xff0c;简单描述&#xff1a;我们知道 jeecg 中使用的 uedit 默认图片上传路径为 “当前项目\plug-in\ueditor\jsp\uploadx\日期\图片.png”&#xff0c;但是把图片放在项目中显然是很不友好的&#xff0c;所以我们自定义上传路径。…

OpenFileDialog 打开文件对话框

InitialDirectory 对话框的初始目录 Filter 要在对话框中显示的文件筛选器&#xff0c;例如&#xff0c;"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*" FilterIndex 在对话框中选择的文件筛选器的索引&#xff0c;如果选第一项就设为1 RestoreDirectory 控制对话框在关…

了解一下Elasticsearch的基本概念

了解一下Elasticsearch的基本概念 一、前文介绍 Elasticsearch&#xff08;简称ES&#xff09;是一个基于Apache Lucene(TM)的开源搜索引擎&#xff0c;无论在开源还是专有领域&#xff0c;Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。注意&#x…

简单的对象定位与登录实例的简单操作

①元素对应的定位方法&#xff1a; ②登录实例&#xff08;暂不考虑验证环节&#xff09; 注意&#xff1a;在实践过程中出现过&#xff0c;密码输入之后又被清空的情况&#xff0c;应该是被处理过&#xff0c;换个别的简单的登录界面试下看看如果没有出现前面所说的情况&#…