傳統方式和插件方式 分別實現 分頁 功能 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   進行控制  通過反射  動態代理 實現 功能的增強    類似於 過濾器的功能 

  不過  值得注意的是  插件 的使用 會修改底層的設計  所以 還是盡量少用插件把  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM