分頁插件PageHelper配置步驟(mybatis)


原理:

mybatis執行sql步驟: 

通過sqlsessionFactory  sqlsession Exector  (執行器對象)mappedstatement(sql語句封裝)

在執行mappedstatement前在sql語句上加上limit即可實現分頁

步驟:

一、引入pageHelper的jar包

二、在mybatis的xml文件中配置分頁插件

<!-- 
    plugins在配置文件中的位置必須符合要求,否則會報錯,順序如下:
    properties?, settings?, 
    typeAliases?, typeHandlers?, 
    objectFactory?,objectWrapperFactory?, 
    plugins?, 
    environments?, databaseIdProvider?, mappers?
-->
<plugins>
    <!-- com.github.pagehelper為PageHelper類所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <property name="dialect" value="mysql"/>
        <!-- 該參數默認為false -->
        <!-- 設置為true時,會將RowBounds第一個參數offset當成pageNum頁碼使用 -->
        <!-- 和startPage中的pageNum效果一樣-->
        <property name="offsetAsPageNum" value="true"/>
        <!-- 該參數默認為false -->
        <!-- 設置為true時,使用RowBounds分頁會進行count查詢 -->
        <property name="rowBoundsWithCount" value="true"/>
        <!-- 設置為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果 -->
        <!-- (相當於沒有執行分頁查詢,但是返回結果仍然是Page類型)-->
        <property name="pageSizeZero" value="true"/>
        <!-- 3.3.0版本可用 - 分頁參數合理化,默認false禁用 -->
        <!-- 啟用合理化時,如果pageNum<1會查詢第一頁,如果pageNum>pages會查詢最后一頁 -->
        <!-- 禁用合理化時,如果pageNum<1或pageNum>pages會返回空數據 -->
        <property name="reasonable" value="true"/>
    </plugin>
</plugins>

這里的com.github.pagehelper.PageHelper使用完整的類路徑。

其他五個參數說明:

  1. 增加dialect屬性,使用時必須指定該屬性,可選值為oracle,mysql,mariadb,sqlite,hsqldb,postgresql,沒有默認值,必須指定該屬性
  2. 增加offsetAsPageNum屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,使用RowBounds分頁時,會將offset參數當成pageNum使用,可以用頁碼和頁面大小兩個參數進行分頁。
  3. 增加rowBoundsWithCount屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,使用RowBounds分頁會進行count查詢。
  4. 增加pageSizeZero屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。當該參數設置為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果(相當於沒有執行分頁查詢,但是返回結果仍然是Page類型)。
  5. 增加reasonable屬性,默認值為false,使用默認值時不需要增加該配置,需要設為true時,需要配置該參數。具體作用請看上面配置文件中的注釋內容。

也可以在spring的xml文件中配置

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="mapperLocations">
    <array>
      <value>classpath:mapper/*.xml</value>
    </array>
  </property>
  <property name="typeAliasesPackage" value="com.isea533.ssm.model"/>
  <property name="plugins">
    <array>
      <bean class="com.github.pagehelper.PageHelper">
        <property name="properties">
          <value>
            dialect=hsqldb
            reasonable=true
          </value>
        </property>
      </bean>
    </array>
  </property>
</bean>

 三、配置完成后再調用類中配置分頁屬性:

   步驟: 只需將查詢的條件放入PageInfo中,設置分頁屬性即可

       //查詢所需數據條件
        List<TbItem> list = ibItemMapper.selectByExample(new TbItemExample());
        //設置分頁信息(第幾頁,每頁數量)
        PageHelper.startPage(pageNum, pageSize);
        //取記錄總條數
        PageInfo<TbItem> pageInfo = new PageInfo<>(list); 
        long sum = pageInfo.getTotal();

        

   原理: 執行自定義( 例如 :ibItemMapper.selectByExample(new TbItemExample())) 查詢語句時,

               會在mappedstatement執行前將分頁的sql語句追加到查詢語句后。

 page的一些屬性:    
page.getPageNum(); page.getPageSize(); page.getStartRow(); page.getEndRow(); page.getTotal(); page.getPages(); page.getFirstPage(); page.getLastPage(); page.isFirstPage(); page.isLastPage(); page.isHasPreviousPage(); page.isHasNextPage();

注意事項:

  • PageHelper.startPage方法后的一個個查詢方法才會被分頁。

  • 不支持帶有for update的語句分頁。
  • 不支持關聯結果查詢。

 

 

 

 

    


免責聲明!

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



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