1. 程式人生 > >springboot 物理分頁外掛

springboot 物理分頁外掛

  <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>


pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    pageSizeZero: true
    params: count=countSql
下面幾個引數都是針對預設 dialect 情況下的引數。使用自定義 dialect 實現時,下面的引數沒有任何作用。
 
helperDialect:分頁外掛會自動檢測當前的資料庫連結,自動選擇合適的分頁方式。 你可以配置helperDialect屬性來指定分頁外掛使用哪種方言。配置時,可以使用下面的縮寫值:
oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
特別注意:使用 SqlServer2012 資料庫時,需要手動指定為 sqlserver2012,否則會使用 SqlServer2005 的方式進行分頁。
你也可以實現 AbstractHelperDialect,然後配置該屬性為實現類的全限定名稱即可使用自定義的實現方法。
 
offsetAsPageNum:預設值為 false,該引數對使用 RowBounds 作為分頁引數時有效。 當該引數設定為 true 時,會將 RowBounds 中的 offset 引數當成 pageNum 使用,可以用頁碼和頁面大小兩個引數進行分頁。
 
rowBoundsWithCount:預設值為false,該引數對使用 RowBounds 作為分頁引數時有效。 當該引數設定為true時,使用 RowBounds 分頁會進行 count 查詢。
 
pageSizeZero:預設值為 false,當該引數設定為 true 時,如果 pageSize=0 或者 RowBounds.limit = 0 就會查詢出全部的結果(相當於沒有執行分頁查詢,但是返回結果仍然是 Page 型別)。
 
reasonable:分頁合理化引數,預設值為false。當該引數設定為 true 時,pageNum<=0 時會查詢第一頁, pageNum>pages(超過總數時),會查詢最後一頁。預設false 時,直接根據引數進行查詢。
 
params:為了支援startPage(Object params)方法,增加了該引數來配置引數對映,用於從物件中根據屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置對映的用預設值, 預設值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。
 
supportMethodsArguments:支援通過 Mapper 介面引數來傳遞分頁引數,預設值false,分頁外掛會從查詢方法的引數值中,自動根據上面 params 配置的欄位中取值,查詢到合適的值時就會自動分頁。 使用方法可以參考測試程式碼中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和 ArgumentsObjTest。
 
autoRuntimeDialect:預設值為 false。設定為 true 時,允許在執行時根據多資料來源自動識別對應方言的分頁 (不支援自動選擇sqlserver2012,只能使用sqlserver),用法和注意事項參考下面的場景五。
 
closeConn:預設值為 true。當使用執行時動態資料來源或沒有設定 helperDialect 屬性自動獲取資料庫型別時,會自動獲取一個數據庫連線, 通過該屬性來設定是否關閉獲取的這個連線,預設true關閉,設定為 false 後,不會關閉獲取的連線,這個引數的設定要根據自己選擇的資料來源來決定。
 
重要提示:
 
當 offsetAsPageNum=false 的時候,由於 PageNum 問題,RowBounds查詢的時候 reasonable 會強制為 false。使用 PageHelper.startPage 方法不受影響。

 

  //當前頁  
    private int pageNum;  
    //每頁的數量  
    private int pageSize;  
    //當前頁的數量  
    private int size;  
  
    //由於startRow和endRow不常用,這裡說個具體的用法  
    //可以在頁面中"顯示startRow到endRow 共size條資料"  
  
    //當前頁面第一個元素在資料庫中的行號  
    private int startRow;  
    //當前頁面最後一個元素在資料庫中的行號  
    private int endRow;  
    //總記錄數  
    private long total;  
    //總頁數  
    private int pages;  
    //結果集  
    private List<T> list;  
  
    //前一頁  
    private int prePage;  
    //下一頁  
    private int nextPage;  
  
    //是否為第一頁  
    private boolean isFirstPage = false;  
    //是否為最後一頁  
    private boolean isLastPage = false;  
    //是否有前一頁  
    private boolean hasPreviousPage = false;  
    //是否有下一頁  
    private boolean hasNextPage = false;  
    //導航頁碼數  
    private int navigatePages;  
    //所有導航頁號  
    private int[] navigatepageNums;  
    //導航條上的第一頁  
    private int navigateFirstPage;  
    //導航條上的最後一頁  
    private int navigateLastPage;  

	@Override
	public PageInfo<PopularTopic> getHotComments(Integer pageNumber,Integer pageSize,String id) {
    	PageHelper.startPage(pageNumber,pageSize);
    	List<PopularTopic> list = poplular.getHotComments(id);
		Page count = (Page<PopularTopic>) list;
		 PageInfo<PopularTopic> p = new PageInfo<PopularTopic>(list);
		count.setStartRow(count.getStartRow());
		return p;
	
	}