PageHelper5.0在oracle数据库中使用

18 篇文章 0 订阅
14 篇文章 0 订阅

 

原理:

        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>
<!--配置 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方法控制台输出的内容为下图所示。

 

 

 

Oracle PageHelper是一个分页插件,它可以帮助开发人员在使用Mybatis时方便地实现Oracle数据库的分页功能。通过控制的打印的可以看出,PageHelper使用非常简便,只需要在查询方法之前调用PageHelper.startPage(int pageNum, int pageSize)方法来设置分页参数,然后进行查询操作即可。 例如,在使用PageHelper进行Oracle分页查询时,可以使用以下代码: ```java @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()); } } ``` 在上述代码,我们先调用PageHelper.startPage(3, 10)方法设置分页参数,表示查询第3页,每页显示10条记录。然后通过hnrbAppInfosMapperl.queryUserByPgeHelper()方法进行查询操作,并将结果存储在List<HnrbUser> list。接下来,我们可以通过PageInfo对象a来获取分页相关的信息,如总记录数、总页数等。最后,我们可以通过a.getList()方法获取当前页的数据列表,并进行相应的操作。 需要注意的是,为了使用PageHelper插件,我们需要在对应的Mapper文件编写查询语句,并将结果映射到相应的实体类。在上述代码,查询语句为: ```xml <select id="queryUserByPgeHelper" resultType="com.wisemax.hnrb.dto.HnrbUser"> select user_name as userName FROM COM_T_USER ORDER by user_name desc </select> ``` 该查询语句将COM_T_USER表的user_name字段作为查询结果的userName属性,并按照user_name字段进行降序排序。请根据实际需求修改查询语句。 通过运行上述代码,控制台输出的内容将包含分页相关的信息和查询结果。请根据实际情况进行相应的处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [PageHelper实现Oracle分页的效率](https://blog.csdn.net/weixin_44592837/article/details/129307800)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [pagehelper插件-mybatis](https://download.csdn.net/download/qq_18142501/10588992)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [PageHelper5.0oracle数据库使用](https://blog.csdn.net/gdsgdh308227363/article/details/83900486)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值