zoukankan      html  css  js  c++  java
  • springboot jpa 多条件查询(单表)

    需要实现的功能:

    多个搜索输入框;全部不填,则查出所有列表;填了条件,就按条件查找;填的条件个数不定。

    方法实现的核心:jpa自带的Specification<T>

    (目前只需要单表,多表其实差不多)

    话不多说,直接上代码。

    实体类

     1 import lombok.Data;
     2 
     3 import javax.persistence.Entity;
     4 import javax.persistence.Id;
     5 
     6 /**
     7  * Created by 孙义朗 on 2017/11/14 0014.
     8  */
     9 @Entity
    10 @Data
    11 public class Employee {
    12     @Id
    13     private String id;
    14     private String name;
    15     private String age;
    16 }

    接口

     1  2  3 import org.springframework.data.jpa.domain.Specification;
     4 import org.springframework.data.jpa.repository.JpaRepository;
     5 
     6 import java.util.List;
     7 
     8 /**
     9  * Created by 孙义朗 on 2017/11/14 0014.
    10  */
    11 public interface EmployeeRepository extends JpaRepository<Employee, String>{
    12     List<Employee> findAll(Specification<Employee> spc, Pageable pageable);
    13 }

    控制器

     1  2  3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.data.domain.PageRequest;
     5 import org.springframework.data.domain.Pageable;
     6 import org.springframework.data.jpa.domain.Specification;
     7 import org.springframework.web.bind.annotation.*;
     8 
     9 import javax.persistence.criteria.*;
    10 import java.util.ArrayList;
    11 import java.util.List;
    12 
    13 /**
    14  * Created by 孙义朗 on 2017/11/14 0014.
    15  */
    16 @RestController
    17 public class EmployeeController {
    18     @Autowired
    19     EmployeeRepository employeeRepository;
    20 
    21     //查询所有Employee
    22     @PostMapping(value = "/getEmployee/{pageNum}/{pageSize}")
    23     public List<Employee> getEmployee(@PathVariable("pageNum") Integer pageNum,
    24                                       @PathVariable("pageSize") Integer pageSize,
    25                                       @RequestBody Employee employee) {
    26         Pageable pageable = new PageRequest(pageNum, pageSize);
    27         List<Employee> eList = employeeRepository.findAll(new Specification<Employee>() {
    28             @Override
    29             public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
    30                 Path<String> id = root.get("id");
    31                 Path<String> name = root.get("name");
    32                 Path<String> age = root.get("age");
    33                 List<Predicate> predicates = new ArrayList<>();
    34                 if (employee.getId() != null && !employee.getId().equals("")) {
    35                     predicates.add(cb.like(id.as(String.class), "%" + employee.getId() + "%"));
    36                 }
    37                 if (employee.getName() != null && !employee.getName().equals("")) {
    38                     predicates.add(cb.like(name.as(String.class), "%" + employee.getName() + "%"));
    39                 }
    40                 if (employee.getAge() != null && !employee.getAge().equals("")) {
    41                     predicates.add(cb.like(age.as(String.class), "%" + employee.getAge() + "%"));
    42                 }
    43                 Predicate[] pre = new Predicate[predicates.size()];
    44                 criteriaQuery.where(predicates.toArray(pre));
    45                 return cb.and(predicates.toArray(pre));
    46             }
    47         }, pageable);
    48 
    49         return eList;
    50     }
    51 
    52 }

    postman测试效果

    (多表查询http://www.cnblogs.com/arrrrrya/p/7865090.html)

  • 相关阅读:
    任务二 发布作业信息(已完成)
    查看作业信息(任务一 已完成)
    项目冲刺任务之任务场景分析(四)
    项目冲刺之任务场景分析(三)
    解析XML文件的两种方式 SAX和DOM
    解析XML文件的两种方式 SAX和DOM
    iOS开发代码规范(通用)
    随机创建点击对象
    自定义加载等待框(MBProgressHUD)
    KVO、KVC
  • 原文地址:https://www.cnblogs.com/arrrrrya/p/7831248.html
Copyright © 2011-2022 走看看