public Page<Task> getUserTask(Long userId, Map<String, Object> searchParams, int pageNumber, int pageSize, String sortType) { PageRequest pageRequest = buildPageRequest(pageNumber, pageSize, sortType); Specification<Task> spec = buildSpecification(userId, searchParams); return taskDao.findAll(spec, pageRequest); } /** * 創建分頁請求. */ private PageRequest buildPageRequest(int pageNumber, int pagzSize, String sortType) { Sort sort = null; if ("auto".equals(sortType)) { sort = new Sort(Direction.DESC, "id"); } else if ("title".equals(sortType)) { sort = new Sort(Direction.ASC, "title"); } return new PageRequest(pageNumber - 1, pagzSize, sort); } /** * 創建動態查詢條件組合. */ private Specification<Task> buildSpecification(Long userId, Map<String, Object> searchParams) { Map<String, SearchFilter> filters = SearchFilter.parse(searchParams); filters.put("user.id", new SearchFilter("user.id", Operator.EQ, userId)); Specification<Task> spec = DynamicSpecifications.bySearchFilter(filters.values(), Task.class); return spec; }
步驟1:創建分頁請求
使用org.springframework.data.domain.PageRequest.PageRequest(int page, int size, Sort sort)創建分頁請求
page:當前頁數-1;
size:每頁記錄數;
sort:springframework封裝的排序類,new Sort(Direction.DESC/ASC,"filed");
步驟2:創建動態查詢條件組合
SearchFilter.parse(searchParams)中searchParams是一個Map集合,集合中數據的格式為
searchParams.put(name,value):
name: LIKE_fieldname; EQ__fieldname; GT_....; LT_....; GTE_....; LTE_....;
value: fieldvalue
返回一個Map<String,SearchFilter>的集合,也可以自己往集合中添加查詢條件:filters.put(fieldname,new SearchFilter(fieldname,Operator.LIKE/EQ/GT......,fieldvalue));
然后生成查詢器:Specification<Task> spec = DynamicSpecifications.bySearchFilter(filters.values(), Task.class);
步驟3:組合返回Page集合對象
taskDao.findAll(spec, pageRequest);
除了jpa data的包外還需要springisde的以下包
import org.springside.modules.persistence.DynamicSpecifications;
import org.springside.modules.persistence.SearchFilter;
import org.springside.modules.persistence.SearchFilter.Operator;