1.repository包
public interface BlogInfoRepository extends JpaRepository<BlogInfo, Long>, JpaSpecificationExecutor<BlogInfo> {
List<BlogInfo> findAll(Specification<BlogInfo> specification);
Page<BlogInfo> findAll(Specification<BlogInfo> specification, Pageable pageable);
2.service.impl包
@Override
public List<BlogInfo> getBlogList(Map<String, String> params) {
List<BlogInfo> result = null;
int pageNo = Integer.parseInt(params.get("pageNo")) ;
int pageSize = Integer.parseInt(params.get("pageSize"));
String userId = params.get("userId");
String title = params.get("title");
String labelId = params.get("labelId");
// 构造自定义查询条件
Specification<BlogInfo> queryCondition = new Specification<BlogInfo>() {
@Override
public Predicate toPredicate(Root<BlogInfo> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicateList = new ArrayList<>();
if (labelId != null && !labelId.equals("")) {
List<BlogInfo> findBlogByLabel = blogInfoRepository.findBlogByLabel(Long.parseLong(labelId));
Path<Object> path = root.get("id");//定义查询的字段
CriteriaBuilder.In<Object> in = criteriaBuilder.in(path);
if(findBlogByLabel!=null&&findBlogByLabel.size()>0){
for (int i = 0; i <findBlogByLabel.size() ; i++) {
in.value(findBlogByLabel.get(i).getId());//存入值
}
}else {
in.value(0);
}
predicateList.add(criteriaBuilder.and(criteriaBuilder.and(in)));//存入条件集合里
}
//如果条件存在添加进sql查询
if (userId != null && !userId.equals("")) {
predicateList.add(criteriaBuilder.equal(root.get("userId"), userId));
}
if (title != null && !title.equals("")) {
predicateList.add(criteriaBuilder.like(root.get("title"), "%"+title+"%"));
}
return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
}
};
// 分页和不分页,这里按起始页和每页展示条数为0时默认为不分页,分页的话按创建时间降序
try {
if (pageNo == 0 && pageSize == 0) {
result = blogInfoRepository.findAll(queryCondition);
} else {
result = blogInfoRepository.findAll(queryCondition, PageRequest.of(pageNo - 1, pageSize,Sort.Direction.DESC,"createtime")).getContent();
}
} catch (Exception e) {
}
return result;
}