• 传统方式和插件方式 分别实现 分页 功能 pageHelper 插件


      

        实现分页  这里提供两种方式  一种是传统的分页方式  一种是基于pageHelper插件 实现的分类     推荐使用后者

        前者是一般开发的方式   思路  先手动创建一个 pageUtil 工具 用于记录 分页的各种信息  然后使用繁琐的方式去调用数据 

      pageUtil  类  可以根据需要自定义

    package com.imooc.project.util;
    /**
     * 这里使用 传统的 方法 进行 分页 设计   需要建立一个 用于分页的信息类  用来存放分页的信息
     * @author lqf
     *
     */
    
    import java.util.List;
    
    public class PageUtil {
       private int currentPageNum; //当前要看那一页 
       
       private int pageSize=10 ; //每页显示的条数 
       
       private int totalSize; //总记录条数
       
       private int startIndex; //查询开始记录的索引  limit ? ?  limit的使用
       
       private int totalPageNum; //总页数 
       
       private int nextPageNum; //下一页 
       
       private int prePageNum; //上一页 
       
       private List records; //当前页的 记录集     List<User> records   返回的是 每一页中user的 集合
       
       //用于显示 页面上的 导航的 页数  用户可以自定义 
       private int startPageNum; // 起始页
       private int endPageNum ; // 结束页 
       private String url ;
       //使用构造方法。 传递 必要的 俩个参数 第一个是 页码 第二个是总记录条数   就可以获得 其他所有的数据 
       
       public PageUtil(int currentPageNum,int totalrecords)
       {
           this.currentPageNum=currentPageNum;
           this.totalSize= totalrecords ; 
           /*   
            * 1   0  - 10    limit(0,10)   
            *  2  10 - 20    limit(10,10)
            *  3 20 -30     limit(20,30)  
            *   (当前页-1 )*10 = 该页索引值   startIndex 
            *    (currentPageNum-1)*pageSize  
            */
           
           //计算开始记录的索引 
           startIndex=(currentPageNum-1)*pageSize;
           //计算总页数 
           totalPageNum=totalSize%pageSize==0?totalSize/pageSize:totalSize/pageSize+1;
           //计算开始和结束页号 这个根据自身可设计     1 2..9
           if(totalPageNum>9)
           {
               startPageNum=currentPageNum-4;
                endPageNum=currentPageNum+4;
    
                if(startPageNum<1)
                {
                    startPageNum=1;
                    endPageNum=startPageNum+8;
                }
                if(endPageNum>totalPageNum)
                {
                    endPageNum=totalPageNum;
                    startPageNum=endPageNum-8;
                }
           }
           else
            {
                startPageNum=1;
                endPageNum=totalPageNum;
    
            }
       }
    
       public int getStartPageNum() {
            return startPageNum;
        }
    
    
        public void setStartPageNum(int startPageNum) {
            this.startPageNum = startPageNum;
        }
    
    
        public int getEndPageNum() {
            return endPageNum;
        }
    
    
        public void setEndPageNum(int endPageNum) {
            this.endPageNum = endPageNum;
        }
    
    //上一页
        public int getPrePageNum() {
            prePageNum=currentPageNum-1;
            
            if(prePageNum<=0)
            {
                prePageNum=1;
            }
            return prePageNum;
        }
      // 下一页
        public int getNextPageNum() {
            
            nextPageNum=currentPageNum+1;
            
            if(nextPageNum>totalPageNum)
            {
                nextPageNum=totalPageNum;
            }
            return nextPageNum;
        }
    
        public int getCurrentPageNum() {
            return currentPageNum;
        }
    
        public void setCurrentPageNum(int currentPageNum) {
            this.currentPageNum = currentPageNum;
        }
    
        public int getPageSize() {
            return pageSize;
        }
    
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
    
        public int getTotalSize() {
            return totalSize;
        }
    
        public void setTotalSize(int totalSize) {
            this.totalSize = totalSize;
        }
    
        public int getStartIndex() {
            return startIndex;
        }
    
        public void setStartIndex(int startIndex) {
            this.startIndex = startIndex;
        }
    
        public int getTotalPageNum() {
            return totalPageNum;
        }
    
        public void setTotalPageNum(int totalPageNum) {
            this.totalPageNum = totalPageNum;
        }
    
        public List  getRecords() {
            return records;
        }
    
        public void setRecords(List  records) {
            this.records = records;
        }
    
        public void setPrePageNum(int prePageNum) {
            this.prePageNum = prePageNum;
        }
    
        public void setNextPageNum(int nextPageNum) {
            this.nextPageNum = nextPageNum;
        }
    
    
        public String getUrl() {
            return url;
        }
    
    
        public void setUrl(String url) {
            this.url = url;
        }
        
        
    }

       web层  简写 

        //获得当前页 
            String num = req.getParameter("num");
            if(num==null)
            {
                num="1";
            }
            //调用pageUtil工具 
            PageUtil page= null ; 
            try {
                page=service.getAllUsers(num);
            } catch (Exception e) {
                e.printStackTrace();
            }
            //将数据 传入 域中   并转发到users.jsp 页面中
            req.setAttribute("page", page);
            req.getRequestDispatcher("/users.jsp").forward(req, resp);

    service层

      userDao userDao= new userDao() ;
         
         public static SqlSessionFactory sqlSessionFactory = null;
        //获得 工具类的信息 
         public PageUtil getAllUsers(String num) throws  Exception{
           //当前页
             int  currentPageNum=1 ;
            // trim() 消除首尾的空格
             if (num != null ) {
                 currentPageNum = Integer.parseInt(num);
                System.out.println(currentPageNum);
                }
            int totalRecords =userDao.totalRecords();
    
            PageUtil pg = new PageUtil(currentPageNum, totalRecords);
    
            List<User> users = userDao.getAllUsers(pg.getStartIndex(), pg.getPageSize());
    
            pg.setRecords(users);
    
            return pg;
    
        }

    dao

    public class userDao  extends BaseDao {
      
        //获得所有的信息个数
        public  int totalRecords()  throws Exception{
    
            // 使用 jdbc 模板 作为数据的连接层
            int result = 0;
            Connection conn = this.getConnection();
            PreparedStatement ps = null;
            ResultSet rs = null;
            // count(*) 返回找到的行数 count(列名) 返回一个列的数据项数 count(*) count 设置别名为 count
            String sql = "select count(*)  count from person";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
    
            if (rs.next()) {
                result = rs.getInt("count");
            }
    
            return result;
        }
        //获得 对应页的信息 
        public List<User> getAllUsers(int startIndex, int pageSize) throws  Exception{
            //使用 数组获得数据 调用DBCP模板 
            QueryRunner queryRunner= new QueryRunner();
            String sql= "select * from person limit ?,?";
            List<User> users= null ; 
            //获得数据
            users=queryRunner.query(this.getConnection(), sql,new BeanListHandler<User>(User.class),new Object[]{startIndex,pageSize});
            return users;
        }
    
    }

     *************************************************

       使用 mybatis  pageHelper 插件 来开发

         pageHelper 插件的 使用教程  

        这是pageHelper 的 开发者  在 GitHub 上的 使用教程

         https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

    mybatis的配置信息   插入    pagehelper  插件

          
         <!-- 在mybatis的配置文件下 配置 pagehelper 插件    先后顺序不要错  否则会报错的  -->
        <plugins>
            <plugin interceptor="com.github.pagehelper.PageInterceptor">
             <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->   
               <property name="helperDialect" value="mysql"/>
            </plugin>
            
        </plugins>

    mapper.xml

    web层 

          pageHelper 插件 要比 传统的 简单的 很多   毕竟是插件嘛      它是对mybatis的四大对象    parameterHandler   resultSetHandler  statementHandler  executor   进行控制  通过反射  动态代理 实现 功能的增强    类似于 过滤器的功能 

      不过  值得注意的是  插件 的使用 会修改底层的设计  所以 还是尽量少用插件把  

  • 相关阅读:
    面向过程
    生成器
    迭代器
    装饰器
    函数及嵌套
    字符编码与文件操作
    linux_ssh
    LNMP
    BZOJ 3238: [Ahoi2013]差异
    BZOJ 3998: [TJOI2015]弦论
  • 原文地址:https://www.cnblogs.com/qinning/p/10077302.html
Copyright © 2020-2023  润新知