情有独钟的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 阅读(...) 评论(...) 编辑 收藏

JPA分页查询与条件分页查询相关推荐

  1. Redis实现分页和多条件模糊查询方案

    导言 Redis是一个高效的内存数据库,它支持包括String.List.Set.SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有模糊 ...

  2. Mysql---子查询的三种查询方式( 表子查询,条件子查询,列中子查询)

    mysql子查询 子查询分为: 列中子查询 单列单行 表子查询 必须有别名 条件子查询 单行单列 多行单列 下列示例表结构: grade表: result表: student表: subject表: ...

  3. MySQL 条件查询(多条件,模糊查询,范围查询,空值查询),分组查询,分组过滤

    WHERE 条件查询 WHERE关键字用指定的条件从表中查询数据. 语法格式: WHERE 查询条件 条件查询: 有比较运算和逻辑运算的查询条件. 带有BETWEEN AND 关键字的查询条件. 配合 ...

  4. java中多个条件模糊查询,带条件的查询—模糊查询

    模糊查询(都是针对字符串操作的) 模糊查询有点类似于正则表达式,但是他没有正则表达式那么强大. 通配符:  _   . % .   []  .   ^ _  表示任意的单个字符串. select * ...

  5. mysql 连接查询两个条件_MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习...

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节 ...

  6. MySQL查询的方法_MYSQL 查询方法

    mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据 select Code,Name from Info --查指定列的数据 select Code ...

  7. MySQL列数不确定查询_MySQL的高级查询

    高级查询: 1.连接查询      指把2张表或者多张表之间做一个连接,所有数据放在一个表里显示.适用于有外键关系的2张表或多张表.如果没有加外键关系,但是这2张表有联系,也可以加连接查询. sele ...

  8. vue+node多条件查询 分页_SpringBoot+JPA框架分页、带条件查询等操作

    前言 最近研究JPA框架,初学SpringBoot时也简单学过,但是不是很深入,所以这次主要是说一些进阶且常用.实用的操作! 前置准备 创建两张表或者让JPA自动建表,任意选择!学生表 package ...

  9. Spring Boot 学习总结之JPA【分页+自定义SQL+多表查询】

    目录 目录 Spring Data JPA简介 与mybatis对比 入手使用 (一)引入依赖 (二)添加配置文件: (四)实体类 (五)Repository: (六)使用: 自定义简单查询 复杂查询 ...

最新文章

  1. Android.mk 用法介绍
  2. Linux Shell脚本编程 --sort命令
  3. JavaScript的arguments及其子对象
  4. 名校教授:把研究生扔到河里,游过去的就成为博士
  5. 【转】Visual Studio 2005/2008中的快捷键与小技巧整理
  6. php清除输出缓冲,php如何清除缓冲区
  7. 曲师大教务系统服务器,曲阜师范大学教务处系统入口地址
  8. 【智能医疗】48页论文详述医学AI最新进展
  9. python2项目出现的错误(UnicodeDecodeError)
  10. imageranger for Mac如何自定义过滤器选项
  11. [unity3d插件]插件效果以及下载
  12. 《财务报表分析从入门到精通》——读书笔记
  13. 阿里巴巴国际站业务如何写出高效便捷的客户开发跟进邮件?
  14. Python 获取LOL所有英雄的传说
  15. 国足亚洲杯首败的背后:与韩国队只差一个孙兴民?
  16. 时间转换中的夏时制问题
  17. 太合音乐领千千音乐突围:在线音乐铜墙铁壁难闯
  18. 如何搜索别人百度云网盘分享的资源
  19. corn表达式的使用
  20. 两年聚37亿美元,“庞氏骗局” 维卡币负责人在美被捕

热门文章

  1. 前端学习(2713):重读vue电商网站33之实现首页路由重定向
  2. 前端学习(2629):npm安装成功配置
  3. 前端学习(2186):知识回顾
  4. 前端学习(1645):前端系列实战课程之留言板功能实现
  5. 第六十二期:看完这篇还不了解Nginx,那我就哭了!
  6. 第三十四期:一次非常有意思的sql优化经历
  7. 数据结构:(2)什么是数据结构
  8. 计算机操作系统(1):OS的作用和目标
  9. 大小不固定的图片和多行文字的垂直水平居中
  10. Vue基础之事件处理器