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

原理:mysql

mybatis執行sql步驟: git

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

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

步驟:sql

1、引入pageHelper的jar包session

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

<!-- 
    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使用完整的類路徑。oracle

其餘五個參數說明:app

  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文件中配置ide

<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>

 3、配置完成後再調用類中配置分頁屬性:

   步驟: 只需將查詢的條件放入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的語句分頁。
  • 不支持關聯結果查詢。
相關文章
相關標籤/搜索