zoukankan      html  css  js  c++  java
  • 一个通用分页类

    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

  • 相关阅读:
    安装高版本的docker
    Apache JMeter汉化手册
    安装python包
    Jmeter Cluster
    doc下设置永久环境变量的好方法
    jmeter非常好的博客收藏
    mysql-学习链接
    python 脚本
    常见python快捷键
    2015年心情随笔--周围太烦躁,我想静静
  • 原文地址:https://www.cnblogs.com/xxbbtt/p/8727422.html
Copyright © 2011-2022 走看看