SpringDataJpa -- 多条件查询
2018-03-31 17:58
741 查看
前言:使用SpringDataJpa 进行多条件查询。
一、单表的多条件查询
二、多表多条件查询
三、单表和多表区别
多表多条件查询只是在单表多条件查询的基础上使用内连接或者外连接,将两张表关联起来查询。所以Java代码的差别就在于:
一、单表的多条件查询
@Override public Page<Courier> pageQuery(Courier model, Pageable pageable) { //封装查询对象Specification Specification<Courier> example = new Specification<Courier>() { @Override public Predicate toPredicate(Root<Courier> root, CriteriaQuery<?> query, CriteriaBuilder cb) { //获取客户端查询条件 String company = model.getCompany(); String courierNum = model.getCourierNum(); String type = model.getType(); //定义集合来确定Predicate[] 的长度,因为CriteriaBuilder的or方法需要传入的是断言数组 List<Predicate> predicates = new ArrayList<>(); //对客户端查询条件进行判断,并封装Predicate断言对象 if (StringUtils.isNotBlank(company)) { //root.get("company")获取字段名 //company客户端请求的字段值 //as(String.class)指定该字段的类型 Predicate predicate = cb.equal(root.get("company").as(String.class), company); predicates.add(predicate); } if (StringUtils.isNotBlank(courierNum)) { Predicate predicate = cb.equal(root.get("courierNum").as(String.class), courierNum); predicates.add(predicate); } if (StringUtils.isNotBlank(type)) { Predicate predicate = cb.equal(root.get("type").as(String.class), type); predicates.add(predicate); } //判断结合中是否有数据 if (predicates.size() == 0) { return null; } //将集合转化为CriteriaBuilder所需要的Predicate[] Predicate[] predicateArr = new Predicate[predicates.size()]; predicateArr = predicates.toArray(predicateArr); // 返回所有获取的条件: 条件 or 条件 or 条件 or 条件 return cb.or(predicateArr); } }; //调用Dao方法进行条件查询 Page<Courier> page = courierDao.findAll(example, pageable); return page; }
二、多表多条件查询
@Override public Page<Courier> pageQuery(Courier model, Pageable pageable) { //封装查询对象Specification Specification<Courier> example = new Specification<Courier>() { @Override public Predicate toPredicate(Root<Courier> root, CriteriaQuery<?> query, CriteriaBuilder cb) { //获取客户端查询条件 String company = model.getCompany(); String courierNum = model.getCourierNum(); Standard standard = model.getStandard(); String type = model.getType(); //定义集合来确定Predicate[] 的长度,因为CriteriaBuilder的or方法需要传入的是断言数组 List<Predicate> predicates = new ArrayList<>(); //对客户端查询条件进行判断,并封装Predicate断言对象 if (StringUtils.isNotBlank(company)) { //root.get("company")获取字段名 //company客户端请求的字段值 //as(String.class)指定该字段的类型 Predicate predicate = cb.equal(root.get("company").as(String.class), company); predicates.add(predicate); } if (StringUtils.isNotBlank(courierNum)) { Predicate predicate = cb.equal(root.get("courierNum").as(String.class), courierNum); predicates.add(predicate); } if (StringUtils.isNotBlank(type)) { Predicate predicate = cb.equal(root.get("type").as(String.class), type); predicates.add(predicate); } //多表的条件查询封装 if (standard != null) { if (StringUtils.isNotBlank(standard.getName())) { //创建关联对象(需要连接的另外一张表对象) //JoinType.INNER内连接(默认) //JoinType.LEFT左外连接 //JoinType.RIGHT右外连接 Join<Object, Object> join = root.join("standard",JoinType.INNER); //join.get("name")连接表字段值 Predicate predicate = cb.equal(join.get("name").as(String.class), standard.getName()); predicates.add(predicate); } } //判断结合中是否有数据 if (predicates.size() == 0) { return null; } //将集合转化为CriteriaBuilder所需要的Predicate[] Predicate[] predicateArr = new Predicate[predicates.size()]; predicateArr = predicates.toArray(predicateArr); // 返回所有获取的条件: 条件 or 条件 or 条件 or 条件 return cb.or(predicateArr); } }; //调用Dao方法进行条件查询 Page<Courier> page = courierDao.findAll(example, pageable); return page; }
三、单表和多表区别
多表多条件查询只是在单表多条件查询的基础上使用内连接或者外连接,将两张表关联起来查询。所以Java代码的差别就在于:
//多表的条件查询封装 if (standard != null) { if (StringUtils.isNotBlank(standard.getName())) { //创建关联对象(需要连接的另外一张表对象) //JoinType.INNER内连接(默认) //JoinType.LEFT左外连接 //JoinType.RIGHT右外连接 Join<Object, Object> join = root.join("standard",JoinType.INNER); //join.get("name")连接表字段值 Predicate predicate = cb.equal(join.get("name").as(String.class), standard.getName()); predicates.add(predicate); } }
相关文章推荐
- Spring Data JPA 复杂/多条件组合查询
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
- Spring MVC结合Spring Data JPA实现按条件查询和分页
- Spring data jpa 多表查询(二:多表动态条件查询)
- Spring Data JPA 复杂/多条件组合查询
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
- spring-data-jpa动态条件查询
- spring-data-jpa 多条件查询 学习记录
- spring data jpa .基本使用,多条件复合查询,报表查询。
- Spring Data JPA 复杂/多条件组合分页查询
- Spring Data Jpa-动态查询条件
- 【重点###】SpringDataJPA的组合条件分页查询(笔记思路,便于忘了复习)页面:EasyUI
- Spring data jpa 多表查询(三:多对多关系动态条件查询)
- spring data jpa 条件分页查询
- 关于Spring data JPA 如何使用条件查询。
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
- Spring Data JPA 多条件查询
- 【java】spring-data-jpa 集成hibernate实现多条件分页查询
- spring data jpa 多表多条件查询
- Spring MVC和Spring Data JPA之按条件查询和分页(kkpaper分页组件)