springboot jpa 多条件查询(单表)
需要实现的功能:
多个搜索输入框;全部不填,则查出所有列表;填了条件,就按条件查找;填的条件个数不定。
方法实现的核心:jpa自带的Specification<T>
(目前只需要单表,多表其实差不多)
话不多说,直接上代码。
实体类
import lombok.Data; import javax.persistence.Entity;
import javax.persistence.Id; /**
* Created by 孙义朗 on 2017/11/14 0014.
*/
@Entity
@Data
public class Employee {
@Id
private String id;
private String name;
private String age;
}
接口
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; /**
* Created by 孙义朗 on 2017/11/14 0014.
*/
public interface EmployeeRepository extends JpaRepository<Employee, String>{
List<Employee> findAll(Specification<Employee> spc, Pageable pageable);
}
控制器
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.web.bind.annotation.*; import javax.persistence.criteria.*;
import java.util.ArrayList;
import java.util.List; /**
* Created by 孙义朗 on 2017/11/14 0014.
*/
@RestController
public class EmployeeController {
@Autowired
EmployeeRepository employeeRepository; //查询所有Employee
@PostMapping(value = "/getEmployee/{pageNum}/{pageSize}")
public List<Employee> getEmployee(@PathVariable("pageNum") Integer pageNum,
@PathVariable("pageSize") Integer pageSize,
@RequestBody Employee employee) {
Pageable pageable = new PageRequest(pageNum, pageSize);
List<Employee> eList = employeeRepository.findAll(new Specification<Employee>() {
@Override
public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
Path<String> id = root.get("id");
Path<String> name = root.get("name");
Path<String> age = root.get("age");
List<Predicate> predicates = new ArrayList<>();
if (employee.getId() != null && !employee.getId().equals("")) {
predicates.add(cb.like(id.as(String.class), "%" + employee.getId() + "%"));
}
if (employee.getName() != null && !employee.getName().equals("")) {
predicates.add(cb.like(name.as(String.class), "%" + employee.getName() + "%"));
}
if (employee.getAge() != null && !employee.getAge().equals("")) {
predicates.add(cb.like(age.as(String.class), "%" + employee.getAge() + "%"));
}
Predicate[] pre = new Predicate[predicates.size()];
criteriaQuery.where(predicates.toArray(pre));
return cb.and(predicates.toArray(pre));
}
}, pageable); return eList;
} }
postman测试效果

(多表查询http://www.cnblogs.com/arrrrrya/p/7865090.html)
springboot jpa 多条件查询(单表)的更多相关文章
- springboot jpa 多条件查询(多表)
前几天写的,贴上来. 实体类. package com.syl.demo.daomain; import lombok.Data; import javax.persistence.*; /** * ...
- oracle查询单表占用空间的大小
oracle查询单表占用空间的大小 SELECT segment_name AS TABLENAME, BYTES B, BYTES KB, BYTES MB FROM user_segments w ...
- Entity Framework 使用sql语句分页(查询单表)
1.查询单表 var pageSize = 2;//条数 var pageIndex = 2;//索引 var sql = @" SELECT D.* FROM ( SELECT ROW_N ...
- Spring Boot Jpa 多条件查询+排序+分页
事情有点多,于是快一个月没写东西了,今天补上上次说的. JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将 ...
- jpa多条件查询重写Specification的toPredicate方法(转)
Spring Data JPA支持JPA2.0的Criteria查询,相应的接口是JpaSpecificationExecutor.Criteria 查询:是一种类型安全和更面向对象的查询 . 这个接 ...
- 使用mybatis框架实现带条件查询-单条件
之前我们写的查询sql都是没有带条件的,现在来实现一个新的需求,根据输入的字符串,模糊查询用户表中的信息 UserMapper.xml UserMapper.java 与jdbc的比较: 编写测试方法 ...
- jpa多条件查询
首先继承JpaSpecificationExecutor<T>接口 需要用到JpaSpecificationExecutor<T>中的Page<T> findAll ...
- MYSQL:查询单表中不同邮箱最近一次发送状态
1.联系方式表-customer_contact: id email 1 123456@qq.com 2 987643@qq.com 3 hahaha@qq.com 2.发送邮件记录表-contact ...
- spring data jpa 组合条件查询封装
/** * 定义一个查询条件容器 * @author lee * * @param <T> */ public class Criteria<T> implements Spe ...
随机推荐
- 关于Relay的麻烦之处
问题背景 由于QueryRender是直接将数据塞进Render()里的 handleUpdate = (hasNextPage, xdata) =>{ console.log(3); cons ...
- 关于人脸识别引擎FaceRecognitionDotNet的实例
根据我上篇文章的分享,我提到了FaceRecognitionDotNet,它是python语言开发的一个项目face_recognition移植.结果真是有喜有忧,喜的是很多去关注了,进行了下载,我看 ...
- 在 CentOS 上运行 ZKEACMS
ZKEACMS Core 是基于 .net core 开发的,可以在 windows, linux, mac 上跨平台运行,接下来我们来看看如何在 CentOS 上运行 ZKEACMS. 安装 .Ne ...
- Metabase 从 H2 迁移到 MySQL 踩坑指南
写在前面的话 首先如果你看到了这篇文章,可能你就已经指定 Metabase 是啥了,我这里还是简单的做个说明: Metabase is the easy, open source way for ev ...
- 整理javascript基础
原始类型值(Primitive values) 下面的全是原始类型值(简称:原始值): 布尔类型:true,false 数字类型:1736,1.351 字符串类型: 'abc',"abc&q ...
- 【bzoj4887】:[Tjoi2017]可乐 矩阵乘法,快速幂
[bzoj4887]:[Tjoi2017]可乐 题目大意:一张无相连通图(n<=30),从1号点开始走,每秒可以走到相邻的点也可以自爆,求第t秒(t<=1e6)后所有的方案数是多少对201 ...
- P4491 [HAOI2018]染色 容斥+NTT
$ \color{#0066ff}{ 题目描述 }$ 为了报答小 C 的苹果, 小 G 打算送给热爱美术的小 C 一块画布, 这块画布可 以抽象为一个长度为 \(N\) 的序列, 每个位置都可以被染成 ...
- Java传参都是传引用变量的副本
最近做练习时碰到一个问题,Java到底是怎样传参的,经过查资料与实验,我发现Java传参都是传引用变量的副本值. 1 Java中的引用变量 1.1 字面值引用变量:即基本数据类型的引用变量 ,如 in ...
- openstack 的horizon的结构
openstack的控制台应用horizon 特点: 1.界面的显示元素进行深度封装: 将元素的后台与前台模板结合在一起.制作html整个界面有点类似搭积木组合的方式. 2.模块加载: 根据权限对ur ...
- win7 设置docker加速器
本来专门已经有了一个源于docker加速器的了,公司的电脑是mac,配置很简单,但是我自己的电脑是win7,在实际操作的时候还真是累啊,官网的教程不知道为什么没起效果,所以最终还是找了其他人发的帖,可 ...