spring jpa Specification 使用
本文只是做个笔记,备忘
public Page<Message> list(BootPage bootPage,MessageQuery messageQuery){
Pageable pageable = new PageRequest(bootPage.getOffset() / bootPage.getLimit(), bootPage.getLimit(),bootPage.getOrder());
Specification<Message> spec1 = (root, query, cb) -> {
Path<Long> tPath = root.get("target");
/*Target is ALL*/
cb.equal(tPath, Message.Target.ALL);
return null;
};
Specification<Message> spec2 = (root, query, cb) -> {
Path<Long> tPath = root.get("target");
Path<String> vPath = root.get("value");
/*or , Target is SCHOOL and value like ou */
cb.equal(tPath, Message.Target.SCHOOL);
cb.like(vPath, "%"+messageQuery.getOu().trim()+"%");
return null;
};
Specification<Message> spec3 = (root, query, cb) -> {
Path<Long> tPath = root.get("target");
Path<String> vPath = root.get("value");
/*Target is PERSONAL and value like uid*/
cb.equal(tPath,Message.Target.PERSONAL);
cb.like(vPath,"%"+messageQuery.getUid()+"%");
return null;
};
Specification spec = Specifications.where(spec1).or(spec2).or(spec3);
return repository.findAll(spec,pageable);
}