How to implement general pagination

后端 未结 2 447
一整个雨季
一整个雨季 2020-12-22 22:08

I am not looking for a Hibernate/JPA/JDBC implementation, but for a general design pattern.

Googling \"pagination\" gives me loads of information, lot of interestin

2条回答
  •  眼角桃花
    2020-12-22 22:42

    If I were you I would return not the result (Set) itself but something that encapsulates retrieval of the result. Some sort of ResultBuilder. Look:

    public interface ResultBuilder {
    
        ResultBuilder withOffset(int offset);
    
        ResultBuilder withLimit(int limit);
    
        ResultBuilder orderedBy(String property);
    
        List result();
    }
    

    and then change DAO method signature:

    ResultBuilder findPersonsByName(String name);
    

    This way you can factor out business-irrelevant arguments from find-family methods. If you don't want to make client specify this params then don't make him.

    Just to be clear:

    public final class HibernateGenericResultBuilder implements ResultBuilder {
    
        private final Criteria criteria;
    
        public HibernateGenericResultBuilder(Criteria criteria) {
            this.criteria = criteria;
        }
    
        @Override public ResultBuilder withOffset(int offset) {
            criteria.setFirstResult(offset);
            return this;
        }
    
        @Override public ResultBuilder withLimit(int limit) {
            criteria.setMaxResults(limit);
            return this;
        }
    
        @Override public ResultBuilder orderedBy(String property) {
            criteria.addOrder(Order.asc(property));
            return this;
        }
    
        @Override public List result() {
            return new LinkedHashSet(criteria.list());
        }
    }
    

提交回复
热议问题