阿里分页工具PageHelper的使用详解

1 PageHelper介绍

PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,例如mysql、
oracle、mariaDB、DB2、SQLite、Hsqldb等。

2 PageHelper使用

2.1 引入maven坐标
		<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>

坐标的版本没有要求 最新的就行

2.2 配置
配置分为两种 第一种为mybatis单独使用是的配置,第二种为mybatis与spring整合时的配置
2.2.1 在myBatis主配置文件的配置即在sqlMapConfig.xml的配置
<plugins>
	<!-- com.github.pagehelper为PageHelper类所在包名 -->
	<plugin interceptor="com.github.pagehelper.PageInterceptor">
		<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
		<property name="param1" value="value1"/>
	</plugin>
</plugins>
2.2.1 在 Spring 配置文件中配置拦截器插件即AppLicaltionContext.xml配置
<!--mybatis整合spring-->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <props>
                            <prop key="helperDialect">oracle</prop>
                            <!--reasonable:分页合理化参数,默认值为 false 。当该参数设置为 true 时, pageNum<=0 时会查询第一
                                页, pageNum>pages (超过总数时),会查询最后一页。默认 false 时,直接根据参数进行查询。-->
                            <prop key="reasonable">true</prop>
                        </props>
                    </property>
                </bean>
            </array>
        </property>
    </bean>
2.3 PageHelper一些属性的介绍

1 helperDialect :分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置 oracle , mysql , mariadb , sqlite , hsqldb , postgresql , db2 , sqlserver , informix , h2 , sqlserver201
, derby,该项可以忽略 因为插件会自动检测你使用的数据库
2 pageSizeZero :默认值为 false ,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit =
0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)
3 reasonable :分页合理化参数,默认值为 false 。当该参数设置为 true 时, pageNum<=0 时会查询第一
页, pageNum>pages (超过总数时),会查询最后一页。默认 false 时,直接根据参数进行查询。

2.4 PageHelper.startPage 静态方法调用

这种方式是我们要掌握的 在你需要进行分页的 MyBatis 查询方法前调用PageHelper.startPage 静态方法即可,
跟在这个方法后的第一个MyBatis 查询方法会被进行分页,即这个方法必须在查询方法的前面一段代码,他内部会自动为我们添加分页语句

public List<Orders> findAllByPage(int page, int pageSize) throws Exception {
	PageHelper.startPage(page, pageSize);
	return ordersDao.findAllByPage();
}

其中该方法 PageHelper.startPage(page, pageSize); 第一个参数为要查询第几页,参数二为一页显示多少条数据例如:PageHelper.startPage(1, 5); 表示的含义就是一页查询第一页 并且一页显示5个

2.5 可以在web层直接new PageHelper提供的一个工具类PageInfo 这个类里面包含了众多关于分页的一些信息
@RequestMapping("/findAll")
public ModelAndView findAll(Integer page, IntegerpageSize) throws Exception {
	List<Orders> ordersList = ordersService.findAllByPage(page,pageSize);
	PageInfo pageInfo = new PageInfo(ordersList);
	ModelAndView mv = new ModelAndView();
	mv.setViewName("order-list");
	mv.addObject("pageInfo", pageInfo);
	return mv;
}
2.7 进入PageInfo看看有什么属性
//当前页
    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;

这里面的就是PageInfo为我们提供的一些分页相关的属性

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值