多条件查询
public Page<Label> pageQuery(Label label, Integer page, Integer size) {
// 分页的参数,传递进来的是第一页,在springDataJPA是从第0页开始,要减1
Pageable pageable = PageRequest.of(page-1, size);
// 根据搜索添加分页查询
Specification<Label> specification = new Specification<Label>() {
@Override
public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder cb) {
ArrayList<Predicate> list = new ArrayList<>();
//标签名
if (StringUtils.isNotBlank(label.getLabelname())){
Path<Object> labelname = root.get("labelname");
Predicate p1 = cb.like(labelname.as(String.class), "%" + label.getLabelname() + "%");
list.add(p1);
}
//标签状态
if (StringUtils.isNotBlank(label.getState())){
Path<Object> state = root.get("state");
Predicate p2 = cb.equal(state.as(String.class), label.getState());
list.add(p2);
}
Predicate[] parr = new Predicate[list.size()];
parr = list.toArray(parr);
return cb.and(parr);
}
};
return labelDao.findAll(specification, pageable);
}
}
/**
* 根据条件查询
* @param searchMap
* @return
*/
@RequestMapping(value="/search",method = RequestMethod.POST)
public Result findSearch( @RequestBody Map searchMap){
return new Result(true,StatusCode.OK,"查询成功",recruitService.findSearch(searchMap));
}
//RecruitService
public List<Recruit> findSearch(Map whereMap) {
Specification<Recruit> specification = createSpecification(whereMap);
return recruitDao.findAll(specification);
}
private Specification<Recruit> createSpecification(Map searchMap) {
return new Specification<Recruit>() {
@Override
public Predicate toPredicate(Root<Recruit> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> predicateList = new ArrayList<>();
// ID
if (StringUtils.isNotBlank((String)searchMap.get("id"))) {
predicateList.add(cb.like(root.get("id").as(String.class), "%"+ searchMap.get("id") +"%"));
}
// 职位名称
if (StringUtils.isNotBlank((String)searchMap.get("jobname"))) {
predicateList.add(cb.like(root.get("jobname").as(String.class), "%"+(String)searchMap.get("jobname")+"%"));
}
// 薪资范围
if (StringUtils.isNotBlank((String)searchMap.get("salary"))) {
predicateList.add(cb.like(root.get("salary").as(String.class), "%"+(String)searchMap.get("salary")+"%"));
}
// 经验要求
if (StringUtils.isNotBlank((String)searchMap.get("condition"))) {
predicateList.add(cb.like(root.get("condition").as(String.class), "%"+(String)searchMap.get("condition")+"%"));
}
// 学历要求
if (StringUtils.isNotBlank((String)searchMap.get("education"))) {
predicateList.add(cb.like(root.get("education").as(String.class), "%"+(String)searchMap.get("education")+"%"));
}
// 任职方式
if (StringUtils.isNotBlank((String)searchMap.get("type"))) {
predicateList.add(cb.like(root.get("type").as(String.class), "%"+(String)searchMap.get("type")+"%"));
}
// 办公地址
if (StringUtils.isNotBlank((String)searchMap.get("address"))) {
predicateList.add(cb.like(root.get("address").as(String.class), "%"+(String)searchMap.get("address")+"%"));
}
// 企业ID
if (StringUtils.isNotBlank((String)searchMap.get("eid"))) {
predicateList.add(cb.like(root.get("eid").as(String.class), "%"+(String)searchMap.get("eid")+"%"));
}
// 状态
if (StringUtils.isNotBlank((String)searchMap.get("state"))) {
predicateList.add(cb.like(root.get("state").as(String.class), "%"+(String)searchMap.get("state")+"%"));
}
// 网址
if (StringUtils.isNotBlank((String)searchMap.get("url"))) {
predicateList.add(cb.like(root.get("url").as(String.class), "%"+(String)searchMap.get("url")+"%"));
}
// 标签
if (StringUtils.isNotBlank((String)searchMap.get("label"))) {
predicateList.add(cb.like(root.get("label").as(String.class), "%"+(String)searchMap.get("label")+"%"));
}
// 职位描述
if (StringUtils.isNotBlank((String)searchMap.get("content1"))) {
predicateList.add(cb.like(root.get("content1").as(String.class), "%"+(String)searchMap.get("content1")+"%"));
}
// 职位要求
if (StringUtils.isNotBlank((String)searchMap.get("content2"))) {
predicateList.add(cb.like(root.get("content2").as(String.class), "%"+(String)searchMap.get("content2")+"%"));
}
return cb.and( predicateList.toArray(new Predicate[predicateList.size()]));
}
};
}
带分页参数的多添件查询
/**
* 分页+多条件查询
* @param searchMap 查询条件封装
* @param page 页码
* @param size 页大小
* @return 分页结果
*/
@RequestMapping(value="/search/{page}/{size}",method=RequestMethod.POST)
public Result findSearch(@RequestBody Map searchMap , @PathVariable int page, @PathVariable int size){
Page<Recruit> pageList = recruitService.findSearch(searchMap, page, size);
return new Result(true,StatusCode.OK,"查询成功",
new PageResult<>(pageList.getTotalElements(), pageList.getContent()) );
}
//RecruitService
public Page<Recruit> findSearch(Map whereMap, int page, int size) {
Specification<Recruit> specification = createSpecification(whereMap);
PageRequest pageRequest = PageRequest.of(page-1, size);
return recruitDao.findAll(specification, pageRequest);
}
//RecruitDao
public interface RecruitDao extends JpaRepository<Recruit,String>,JpaSpecificationExecutor<Recruit>{
}