Fork me on GitHub
13 Aug 2015 Comments

使用springdata JPA实现分页

1.创建dao,继承JpaSpecificationExecutor和PagingAndSortingRepository。如下:



    public interface CodeEntryDao  extends JpaSpecificationExecutor,PagingAndSortingRepository<CodeEntry,Long> 
</pre>

2.提供findAll接口,传入Specification 和Pageable 两个参数。如下:



public Page findAll( Specification spec,Pageable pageRequest);
</pre>

3.在service中调用findAll时创建Specification和Pageable,Specification是查询条件,Pageable包含pageNumber,pageSize,sort等参数。创建过程如下。

    
        /**
         * 创建分页请求.
         */
        private PageRequest buildPageRequest(int pageNumber, int pagzSize, String sortType) {
            Sort sort = null;
            if ("auto".equals(sortType)) {
                sort = new Sort(Sort.Direction.DESC, "id");
            } else if ("id".equals(sortType)) {
                sort = new Sort(Sort.Direction.ASC, "entryId");
            }
    
            return new PageRequest(pageNumber - 1, pagzSize, sort);
        }
    
    
        /**
         * 创建动态查询条件组合.
         */
        private Specification buildSpecification(Map<String, Object> searchParams) {
            List< SearchFilter> filters = (List) SearchFilter.parse(searchParams);
            Specification spec = DynamicSpecifications.bySearchFilter(filters, CodeEntry.class);
            return spec;
        }
</pre>

创建Specification时需要要有searchFilterDynamicSpecifications]类支持,点击去github克隆源码

原创文章,转载请注明:转载自:使用springdata JPA实现分页