1. 程式人生 > >一個通用分頁類

一個通用分頁類

ref num hello 實現 col rom 還需要 一個 能夠

1、功能

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

2、實現原理

  分頁的實現通常分為兩種,一種是先把數據全查詢出來再分頁,一種是需要多少查詢多少,這裏使用第二種,所以就需要先實現在dao層能夠查詢一定範圍內的數據,這裏就實現通過id作為鍵值,查詢一定範圍內的數據的功能

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

    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:

  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中的方法即可,不過我還得在想想這樣是否合理。。。

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

    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();
    }
}

3、實現效果:

  先看看數據庫的數據吧:

  技術分享圖片

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

  

  技術分享圖片

  技術分享圖片

4、總結

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

5、源代碼

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

一個通用分頁類