一个通用分页类

一、功能前端

  这个通用分页类实现的功能是输入页数(第几页)和每页的数目,就能得到相应的数据。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

相关文章
相关标签/搜索