SpringBoot 条件查询+分页

最近自己撸了一个web项目,后端用的spring boot,总体来讲spring boot的开发效率很高。

今天分享一下条件查询+分页返回结果的部分:

spring boot版本:2.0.2

实体类:Device.java

controller中主体:

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Order;

@PostMapping("/query")
Page<Device> findByFilter(@RequestBody QueryDeviceFilter filter) {
	   	
	Specification<Device> spec = buildFilters(filter);
        PageRequest req = 
        PageRequest.of(filter.getPage(), filter.getSize(), Sort.by(Order.asc("no"))); 
    //按照编号字段排序
	Page<Device> pageDevice = repo.findAll(spec, req);
	return pageDevice;
}

组织查询条件:

/** 组织查询条件 */
public Specification<Device> buildFilters(QueryDeviceFilter filter) {
		
	return new Specification<Device>() {
	@Override
	public Predicate toPredicate(Root<Device> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
				
		List<Predicate> predicate = new ArrayList<>();
               
        if(filter.getDeployStartTime() != null){
                    predicate.add(cb.greaterThanOrEqualTo(root.get("deployTime").as(Date.class), filter.getDeployStartTime()));
        }
        if(filter.getDeployEndTime() != null){
                    predicate.add(cb.lessThanOrEqualTo(root.get("deployTime").as(Date.class), filter.getDeployEndTime()));
        }
                
        Predicate[] pre = new Predicate[predicate.size()];
        return query.where(predicate.toArray(pre)).getRestriction();
	}
};
}

查询条件类 QueryDeviceFilter:

public class QueryDeviceFilter {
	String name;
	String no;
	Date deployStartTime;
	Date deployEndTime;
	
	Integer page; //第几页
	Integer size; //每页几个数据
	
	//...
}

请求:

返回:

{
    "content": [
        {
            "id": 14,
            "no": "0188",
            "name": "汽渡7号机",
            "deployTime": "2017-04-12"
        },
        {
            "id": 11,
            "no": "1888",
            "name": "Alibaba",
            "deployTime": "2017-08-30"
        }
    ],
    "pageable": {
        "sort": {
            "sorted": true,
            "unsorted": false
        },
        "offset": 0,
        "pageSize": 2,
        "pageNumber": 0,
        "paged": true,
        "unpaged": false
    },
    "last": true,
    "totalPages": 1,
    "totalElements": 2,
    "number": 0,
    "size": 2,
    "sort": {
        "sorted": true,
        "unsorted": false
    },
    "first": true,
    "numberOfElements": 2
}

猜你喜欢

转载自blog.csdn.net/zhouyingge1104/article/details/85918590