Pageable pageable = PageRequest.of(request.getPage(), request.getPageSize(), Sort.by(Sort.Direction.DESC, "id"));
Page<Produce> producePage = produceRepo.findAll(
new Specification() {
@Override
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
//WHERE del_flag=0 AND status=1 AND ((title like "%keyword%") OR (content like "%keyword%") OR (music_title like "%keyword%"))
List<Predicate> pListAnd = new ArrayList<Predicate>();
// 删除标记:0-正常1-删除
pListAnd.add(cb.equal(root.get("delFlag"), DelFlag.NORMAL));
// 状态: 0-禁用 1-启用
pListAnd.add(cb.equal(root.get("status"), Status.OPEN));
Predicate[] psAnd = new Predicate[pListAnd.size()];
Predicate preAnd = cb.and(pListAnd.toArray(psAnd));
List<Predicate> pListOr = new ArrayList<Predicate>();
//标题
if (request.getKeyword() != null && !"".equals(request.getKeyword())) {
pListOr.add(cb.like(root.get("title").as(String.class), "%" + request.getKeyword() + "%"));
}
//内容
if (request.getKeyword() != null && !"".equals(request.getKeyword())) {
pListOr.add(cb.like(root.get("content").as(String.class), "%" + request.getKeyword() + "%"));
}
//音乐标题
if (request.getKeyword() != null && !"".equals(request.getKeyword())) {
pListOr.add(cb.like(root.get("musicTitle").as(String.class), "%" + request.getKeyword() + "%"));
}
Predicate[] psOr = new Predicate[pListOr.size()];
if (pListOr.size() > 0) {
Predicate preOr = cb.or(pListOr.toArray(psOr));
query.where(preAnd, preOr).getRestriction();
} else {
query.where(preAnd).getRestriction();
}
return null;
}
}, pageable);
注意:JPA分页索引从0开始,Mybatis-Plus分页索引从1开始。