目录
1. 什么是Specification接口?
2. Specification接口中定义的方法
3. 方法名称和SQL对应关系
4. Specification使用示例
4.1 首先,对应的Repository需要实现JpaSpecificationExecutor接口
4.2 然后,在业务类service中,分页查询的方法如下
1. 什么是Specification接口?
Spring Data JPA中可以通过JpaSpecificationExecutor接口实现动态/分页查询。
而JpaSpecificationExecutor是围绕着Specification接口来定义的。
可理解为:Specification构造的就是查询条件。
2. Specification接口中定义的方法
该接口中只定义了一个方法:
//构造查询条件 public Predicate toPredicate(Rootroot, CriteriaQuery> query, CriteriaBuilder cb);
3. 方法名称和SQL对应关系
4. Specification使用示例
4.1 首先,对应的Repository需要实现JpaSpecificationExecutor接口
4.2 然后,在业务类service中,分页查询的方法如下
public Page findPerfCases(PagingQueryPerfCaseDto paging){
//分页查询的因素:perfCaseName, current, pageSize
String perfCaseName = paging.getPerfCaseName();
Integer current = paging.getCurrent();
Integer pageSize = paging.getPageSize();
//查询条件. 添加先关的查询条件,类似于where后面的语句
//写法一
Specification specification = (root, criteriaQuery, criteriaBuilder) -> {
List predicateList = new ArrayList<>();
if(perfCaseName != null && !"".equals(perfCaseName.trim())){
predicateList.add(criteriaBuilder.like(root.get("perfCaseName"), "%"+perfCaseName+"%"));
}
predicateList.add(criteriaBuilder.equal(root.get("isDelete"), 0));
return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
};
//排序
Sort.Order order = new Sort.Order(Sort.Direction.DESC, "updateTime");
Sort sort = Sort.by(order);
//分页
Pageable pageable = PageRequest.of(current-1, pageSize, sort);
//分页查询
Page perfCases = perfCaseRepo.findAll(specification, pageable);
return perfCases;
}
解析:
(1)



