事情有点多,于是快一个月没写东西了,今天补上上次说的。

  JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。---百度百科
  以上是官方的说法,我的理解呢,就是说jpa可以让与数据库相关的操作变得更简单的*瓜式操作,有现成的CRUD接口供你调用,整个过程行云流水非常简单,不用写SQL,代码简单,面向对象,还不用担心SQL注入的安全问题。
那么简单的操作呢,这里就不说了,就写一下简单中复杂一点的操作---多条件动态查询+分页+排序。这个查询呢只是单表查询,而至于多表关联呢,目前我还是用视图,暂时没有想到更好的办法,还在学习中。等我学会了一定写出来。
 
1、Utils.java工具类中的方法 
 
 1 /** 
2 * 获取Sort
*
* @param direction - 排序方向
* @param column - 用于排序的字段
*/
public static Sort getSort(String direction,String column){
Sort sort = null;
if(column == null || column == "") return null;
if(direction.equals("asc")||direction.equals("ASC")){
sort = Sort.by(Sort.Direction.ASC,column);
}else {
sort = Sort.by(Sort.Direction.DESC,column);
}
return sort;
}
/**
* 获取分页
* @param pageNumber 当前页
* @param pageSize 页面大小
* @param sort 排序;sort为空则不排序只分页
* @return 分页对象
*/
public static Pageable getPageable(int pageNumber,int pageSize,Sort sort){
if(sort!=null){
return PageRequest.of(pageNumber,pageSize,sort);
}
return PageRequest.of(pageNumber,pageSize);
}
/**
* 判断String是否为空
* @param str
* @return
*/
private static boolean isEmpty(String str){
if(str.equals(null)||str.equals("")) return true;
return false;
}

2、实现类

这里查询相关参数是前端传的,我懒,所以用默认值了,查询条件可以是多条件动态,排序也可以是动态的,只要传排序字段和排序方向对号入座即可。

 @Override
public Page<User> findAll() {
// 创建测试对象
User user = new User();
user.setName("1");
Sort sort = Utils.getSort("asc","name");
Pageable pageable = Utils.getPageable(0,5,sort);
// 调用组装查询条件方法
Specification<User> spec = getSpecification(user);
return userRepository.findAll(spec,pageable);
} /**
* 组装查询条件
* @param user -查询相关对象
* @return 返回组装过的多查询条件
*/
private Specification<User> getSpecification(User user) {
Specification<User> specification = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = new ArrayList<>();
// 判断条件不为空
if(!Utils.isEmpty(user.getName())){
predicates.add(criteriaBuilder.like(root.get("name"),user.getName()));
}
return criteriaQuery.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
}
};
return specification;
}
 

Spring Boot Jpa 多条件查询+排序+分页的更多相关文章

  1. spring boot jpa 多条件组合查询带分页的案例

    spring data jpa 是一个封装了hebernate的dao框架,用于单表操作特别的方便,当然也支持多表,只不过要写sql.对于单表操作,jpake可以通过各种api进行搞定,下面是一个对一 ...

  2. spring data jpa 组合条件查询封装

    /** * 定义一个查询条件容器 * @author lee * * @param <T> */ public class Criteria<T> implements Spe ...

  3. EF:分页查询 + 条件查询 + 排序

    /// <summary> /// linq扩展类---zxh /// </summary> /// <typeparam name="T">& ...

  4. Spring Boot中利用递归算法查询到所有下级用户,并手动进行分页

    Spring Boot中利用递归算法查询到所有下级用户,并手动进行分页 前提:语言用的是kotlin(和Java一样,但更简洁),写下这篇文章用来记录编程过程中遇到的一些难点 1.功能需求 前端用户A ...

  5. Spring Boot JPA分页 PageRequest报错

    在使用Spring Boot JPA分页 PageRequest分页时,出现如下错误: 本来以为是包导入出现了问题,结果发现并不是.导入包如下: 后来在网上查找相关资料,发现这样的用法,好像也可以用, ...

  6. Spring Boot JPA的查询语句

    文章目录 准备工作 Containing, Contains, IsContaining 和 Like StartsWith EndsWith 大小写不敏感 Not @Query Spring Boo ...

  7. Spring Boot(五):Spring Boot Jpa 的使用

    在上篇文章Spring Boot(二):Web 综合开发中简单介绍了一下 Spring Boot Jpa 的基础性使用,这篇文章将更加全面的介绍 Spring Boot Jpa 常见用法以及注意事项. ...

  8. Spring Boot Jpa 的使用

    Spring Boot Jpa 介绍 首先了解 Jpa 是什么? Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范.它为 Java 开发人员提供了一种 ...

  9. (转)Spring Boot(五):Spring Boot Jpa 的使用

    http://www.ityouknow.com/springboot/2016/08/20/spring-boot-jpa.html 在上篇文章Spring Boot(二):Web 综合开发中简单介 ...

随机推荐

  1. 解释Crypto模块,No module named "Crypto"

    1.pip install pycryptodome 2.Python\Python38\Lib\site-packages,找到这个路径,下面有一个文件夹叫做crypto,将小写c改成大写C就ok了 ...

  2. Developer 转型记:一个开发平台的“魔力”

    摘要:开发者该如何借助AI技术,探索可沉淀的落地应用?在这AI技术浪潮下,实现完美的应用创新?我们一起来听听他的故事…… 随着政策的加持.技术快速的迭代,人工智能热潮正在蔓延.2020年,AI落地大考 ...

  3. 云小课 | IPv4枯了,IPv6来了

    摘要:本篇主要分享IPv4与IPv6的区别和IPv6的应用场景,助您快速理解华为云IPv6双栈及IPv6 EIP. IPv6的由来 上节课我们讲了公网IP与私网IP,了解了IP地址的一些知识. 我们一 ...

  4. Pytest单元测试框架-allure测试报告

    Allure Test Report 对于不同的编程语言,有很多很酷的测试框架.不幸的是,它们中只有少数能够提供测试执行输出的良好表示.Qameta软件测试团队正在致力于Allure--一个开源框架, ...

  5. apicloud版人人商城app打包教程

    一.APP环境搭建和配置编译1.登录APICLOUD后台新建应用 步骤一 .注册账号注册apicloud 账号并登录APICLOUD控制台 注册apicloud 账号:https://www.apic ...

  6. iOS alertController自带的输入框

    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:@" ...

  7. markdown公式指导手册

    #Cmd Markdown 公式指导手册 标签: Tutorial 转载于https://www.zybuluo.com/codeep/note/163962#1%E5%A6%82%E4%BD%95% ...

  8. Ubuntu16.04忘记用户登录密码以及管理员密码,重置密码的解决方案

    1. 问题现象: 密码遗忘 2. 问题原因 问题原因,搞不懂,只是修改了/etc/shadow和/etc/sudoers这俩文件 3. 解决方案 在系统开机前常按shift键进入grub界面,如下: ...

  9. 20、FlyWeight 享元模式

    池化的思想 1.Flyweight享元模式 运用共享技术有效地支持大量细粒度对象的复用.系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用.由于享元模式要求能够共享的对象必 ...

  10. 怎么用 Solon 开发基于 undertow jsp tld 的项目?

    Solon 开发 jsp 还是简单的,可以有 jetty 启动器 或者 undertow 启动器.此文用 undertow + jsp + tld 这个套路搞一把: 一. 开始Meven配置走起 用s ...