一個通用分頁類

一、功能前端

  這個通用分頁類實現的功能是輸入頁數(第幾頁)和每頁的數目,就能得到相應的數據。git

二、實現原理github

  分頁的實現一般分爲兩種,一種是先把數據全查詢出來再分頁,一種是須要多少查詢多少,這裏使用第二種,因此就須要先實如今dao層可以查詢必定範圍內的數據,這裏就實現經過id做爲鍵值,查詢必定範圍內的數據的功能spring

  dao層須要實現一個返回id在一個範圍內的數據,那就在dao層的接口中添加一個這個方法:sql

    List<User> selectByRange(@Param("low") Integer low, @Param("high") Integer high);

  在mapper.xml中,添加相應的sql語句:數據庫

  <select id="selectByRange" resultMap="BaseResultMap">

    SELECT <include refid="Base_Column_List"/>
    FROM t_user
    WHERE id
    BETWEEN #{low,jdbcType=INTEGER}
    AND #{high,jdbcType=INTEGER}

  </select>

  而後在Service層的接口和類添加這樣一個方法,這裏實現了輸入上下標返回一個User的List:api

  public List<User> findByRange(int low, int high) {
    return userDao.selectByRange(Integer.valueOf(low), Integer.valueOf(high));
  }

  再而後是通用的分頁類,這裏的low和high,將在pagenumber當前頁數或limit被修改時同時被修改:瀏覽器

public class pageEntity<T> {

    private List<T> list;           //對象記錄結果集
    private int total;      // 總條數數
    private int limit;     // 每頁顯示條數
    private int pages;      // 總頁數
    private int pageNumber; // 當前頁
    private int low;        //須要獲取數據的第一個id
    private int high;       //須要獲取數據的最後一個id


    public int getLow() {
        return low;
    }

    public void setLow(int low) {
        this.low = low;
    }

    public int getHigh() {
        return high;
    }

    public void setHigh(int high) {
        this.high = high;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public int getLimit() {
        return limit;
    }

    public void setLimit(int limit) {
        this.limit = limit;
        this.low = (this.pageNumber - 1) * this.limit;
        this.high = low + this.limit - 1;
    }

    public int getPages() {
        return pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

    public int getPageNumber() {
        return pageNumber;

    }

    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
        this.low = (this.pageNumber - 1) * this.limit;
        this.high = low + this.limit - 1;
    }


}

  而後是測試類,其實這個測試類我是準備命名爲manager類的,這樣dao層實現基本的數據庫操做,service層實現針對實體類的基本操做,而後manager類中實現前端的需求,而後api類,也就是jersey中就只須要調用manager中的方法便可,不過我還得在想一想這樣是否合理。。。mybatis

  總之先這樣寫着吧,test中將添加這樣的方法及實現:app

    public pageEntity<User> Paging(pageEntity<User> pageEntity) {
        pageEntity.setList(userService.findByRange(pageEntity.getLow(),pageEntity.getHigh()));
        return pageEntity;
    }

  而後就是api類中調用了:

@Path("hello")
public class JerseyTest {

    @GET
    @Produces("text/plain")
    @Path("page")
    public String getString(@QueryParam("page") int page, @QueryParam("limit") int limit) {
        ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
        TestAPI test = (TestAPI) context.getBean("test");

        pageEntity<User> pageEntity = new pageEntity<User>();
        pageEntity.setLimit(limit);
        pageEntity.setPageNumber(page);
        pageEntity = test.Paging(pageEntity);
        StringBuilder stringBuilder = new StringBuilder();
        for (User user : pageEntity.getList()) {
            stringBuilder.append(" ");
            stringBuilder.append(user.getUsername());
        }
        return stringBuilder.toString();
    }
}

 

三、實現效果:

  先看看數據庫的數據吧:

  

  而後是瀏覽器中使用時的狀態:

  

  

  

四、總結

  這裏我實現了一個pageEntity類,這個類使用了泛型因此也支持其餘類,目前實現的功能可以傳入當前頁和每頁的數目,獲得相應的數據,前端應該還須要咱們返回,總的數據量,總共有多少頁等等的數據,不過這都是額外的操做了,實現也挺簡單的。經過在dao層添加方法,用sql語句計算出來,再給賦值就行了。

 

五、源代碼

  源代碼能夠從這裏獲取:https://github.com/xbtshady/spring_mybatis

相關文章
相關標籤/搜索