八、Spring Data JPA多条件分页查询

多条件查询

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>{

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值