JPA中Specification方法
@Repository
public interface ProjectDao extends JpaRepository<Project, String> {
Page<Project> findAll(Specification<Project> specification,Pageable pageable);
}
- 步骤二:复写Specification方法,将查询条件条件到
criteriaBuilder
中
private <K> Specification<K> generateSpec(String name, String jobNo) {
return (entity, query, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
if(!StringUtils.isEmpty(name)) {
predicates.add(criteriaBuilder.like(entity.get("name"), "%" + name + "%"));
}
if(!StringUtils.isEmpty(jobNo)) {
predicates.add(criteriaBuilder.like(entity.get("jobNo"), "%" + jobNo + "%"));
}
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
};
}
- 注意:
criteriaBuilder
可以有like
、equal
等,然后可以用and
拼接,and
方法可以接收一个数组。这些方法同样会返回一个Specification
,所以最后一个用and
返回。 - 注意:
entity.get
中的是类中的成员变量名,而不是数据库中的