Spring Data JPA 实现带条件查询带group by的分页查询

DAO层:

@Repository
public interface DeviceMapper extends JpaRepository<DeviceManager, String>,JpaSpecificationExecutor<DeviceManager> {
	//带条件的分页查询        
    public Page<DeviceManager> findByIfUsed(Integer ifUsed, Pageable pageable); 
}

Service实现层

//单表根据查询条件的分页  
	@Override
	public Object queryTotalList(Pageable pageable) {

		Specification<DeviceManager> spec = getWhereClause();  

		Page<DeviceManager> pageRst = deviceMapper.findAll(spec, pageable);  
		
		Map<String,Object> resMap = new HashMap<>();
		//Page的遍历
		if(pageRst.iterator().hasNext()) {
			String category = pageRst.iterator().next().getCategory();
			if(resMap.containsKey(category)) {
				resMap.put(category, (Integer)resMap.get(category)+1);
			}else {
				resMap.put(category, 1);
			}
		}
		resMap.put("list", pageRst);
		return resMap;
	}

	//制造查询条件结果(建议存放map)  
	private Specification<DeviceManager> getWhereClause() {  
		return new Specification<DeviceManager>() {  
			public Predicate toPredicate(Root<DeviceManager> r, CriteriaQuery<?> q, CriteriaBuilder cb) {  
				Predicate predicate = cb.conjunction();  
					//添加查询条件
					predicate = cb.equal(r.get("ifUsed").as(Integer.class), 0);  
					//添加group by
					q.groupBy(r.get("category"));
				return predicate;  
			}  
		};  
	}

Controller层

@GetMapping("/device_list")
	public Object queryList(@RequestParam(value = "page", defaultValue = "1") Integer page,
            @RequestParam(value = "size", defaultValue = "10") Integer pageSize) {
		Pageable pageable = new PageRequest(page,pageSize);
		return deviceService.queryTotalList(pageable);
	}
学习代码~~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值