1. 程式人生 > >PageHelper5.0在oracle資料庫中使用

PageHelper5.0在oracle資料庫中使用

原理:
        pageHelper會使用ThreadLocal獲取到同一執行緒中的變數資訊,各個執行緒之間的Threadlocal不會相互干擾,也就是Thread1中的ThreadLocal1之後獲取到Tread1中的變數的資訊,不會獲取到Thread2中的資訊,所以在多執行緒環境下,各個Threadlocal之間相互隔離,可以實現,不同thread使用不同的資料來源或不同的Thread中執行不同的SQL語句,所以,PageHelper利用這一點通過攔截器獲取到同一執行緒中的預編譯好的SQL語句之後將SQL語句包裝成具有分頁功能的SQL語句,並將其再次賦值給下一步操作,所以實際執行的SQL語句就是有了分頁功能的SQL語句。
 

使用方法

1.加jar包

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.0.0</version>
</dependency>
2.在db.xml配置檔案中<property id="plugins"></property>節點配置相關的內容(採用的是oracle資料庫,5.0以上的pagehelper採用的是helperDialect=oracle)
<!--配置 MyBatis factory-->
<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.wisemax.common.dto,
      com.wisemax.sm.dto,
      com.wisemax.lim.dto,
      com.wisemax.hnrb.dto"/>
    <property name="plugins">
        <array>
            <bean class="com.github.pagehelper.PageInterceptor">
                <property name="properties">
                    <value>
                        helperDialect=oracle
                    </value>
                </property>
            </bean>
        </array>
    </property>
</bean>
3.pageHelper的使用,採用test類進行測試!
1.測試中PageHelper.startPage(3,10)傳人的引數是當前頁碼,和每頁顯示的條數。

2.根據條件查詢對應的List,最後將List扔進到Pageinfo的構造方法中。

3.最終返回給頁面的的List是PageInfo中的List,通過getList()獲得對應的返回集合即可。

4.如果前端頁面需要總的條數。直接使用a.getTotal()得到的即是符號查詢條件的總條數目。

@Test
public void Select() {
    PageHelper.startPage(3, 10);
    List<HnrbUser> list = hnrbAppInfosMapperl.queryUserByPgeHelper();
    PageInfo<HnrbUser> a = new PageInfo<>(list);
    System.out.println(" a = " + a.toString());
    System.out.println(a.getTotal());
    for (HnrbUser s:a.getList()
         ) {
        System.out.println("UserName" + s.getUserName());
    }
}
對應的sql為下圖所示。由於是測試,所以對應的查詢條件為空,Sql中不設定對應的分頁資訊。(之前使用的是rownum 作為一個欄位,然後根據分頁資訊大於小於該欄位。現在使用pageHelper不需要rownum了)
<select id="queryUserByPgeHelper" resultType="com.wisemax.hnrb.dto.HnrbUser" >
  select user_name as userName FROM COM_T_USER ORDER by user_name desc
</select>
執行上面的test方法控制檯輸出的內容為下圖所示。