传统方式和插件方式 分别实现 分页 功能 pageH…

2018-12-09 11:19:28来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

  

    实现分页  这里提供两种方式  一种是传统的分页方式  一种是基于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   进行控制  通过反射  动态代理 实现 功能的增强    类似于 过滤器的功能 

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

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:IDEA出现Cannot resolve symbol &quot;xxx&quot;(无法解析符号)

下一篇:List排序Collections.sort 重写compare