集成Mybatis分页插件PageHelper

参考:https://blog.csdn.net/chenjunfengf/article/details/76785442

https://www.cnblogs.com/qlong8807/p/5580424.html

https://blog.csdn.net/kalnon/article/details/79559627

https://blog.csdn.net/zaomengshi1045518847/article/details/79953891

GitHub源代码地址:https://github.com/pagehelper/Mybatis-PageHelper

一、pom依赖:

<!-- 分页插件(分页插件不支持嵌套结果映射、不支持带有for update语句的分页) -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>0.9.4</version>
</dependency>
<!--mybatis-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.3.0</version>
</dependency>
<!--mybatis-spring整合包-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.2.3</version>
</dependency>

二、sqlSessionFactory中配置拦截器插件

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--mybatis配置文件-->
    <property name="configLocation" value="classpath:conf/mybatis/mybatis-config.xml"></property>
    <!--配置连接数据库数据源-->
    <property name="dataSource" ref="dataSource"/>
    <!-- 类型别名包,默认引入所有类 -->
    <property name="typeAliasesPackage" value="com.xiaomi.pojo"></property>
    <!--配置Mapper文件所在位置-->
    <property name="mapperLocations" value="classpath:/mybatis/sqlMap_*.xml"/>
    <!-- 配置拦截器插件 -->
    <property name="plugins">
        <array>
            <bean class="com.github.pagehelper.PageInterceptor">
                <property name="properties">
                    <!--使用下面的方式配置参数,一行配置一个 -->
                    <value>
                        helperDialect=mysql
                        reasonable=true
                        supportMethodsArguments=true
                        params=count=countSql
                        autoRuntimeDialect=true
                        pageSizeZero=false
                        supportMethodsArguments=false
                    </value>
                </property>
            </bean>
        </array>
    </property>
</bean>

分页插件中使用到的参数说明

  • helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 
    你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值: 
    oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby 
    特别注意:使用 SqlServer2012 数据库时,需要手动指定为 sqlserver2012,否则会使用 SqlServer2005 的方式进行分页。 
    你也可以实现 AbstractHelperDialect,然后配置该属性为实现类的全限定名称即可使用自定义的实现方法。
  • reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, 
    pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询(一般都是填写true)。
  • params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 
    可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 
    默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero一般都是用默认值)。
  • supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
  • autoRuntimeDialect:默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页 
    (不支持自动选择sqlserver2012,只能使用sqlserver一般都是填写true
  • pageSizeZero:默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。(一般都是填写false

三、代码中使用

//获取第1页,20条内容,默认先查询总数count
Page<?> page =PageHelper.startPage(1, 20);
// 排序
PageHelper.orderBy("sessionId desc , id asc");
//只有紧跟在PageHelper.startPage方法后的第一个*Mybatis的查询Select*方法会被分页;后面的select不会被分页,除非再次调用PageHelper.startPage

list=coverageHistoryInfoDal.conditionalQuery(po);
//用PageInfo对结果进行包装
PageInfo pageInfo= new PageInfo(list);
//当前页
System.out.println(pageInfo.getPageNum());
//每页的数量
System.out.println(pageInfo.getPageSize());
//总记录数
System.out.println(page.getTotal()); // 这里需要注意!!!
//总页数
System.out.println(pageInfo.getPages());
// 是否有上一页
System.out.println(pageInfo.isHasPreviousPage());
// 是否有下一页
System.out.println(pageInfo.isHasNextPage());
//list是结果集
Object object=pageInfo.getList().get(0);
System.out.println(object);

四、前端可以配合使用这个js分页控件:http://www.jq22.com/jquery-info4510,或者直接使用bootstrap table,里面包含了分页功能(BootstrapTable 可以参考这篇文章 https://blog.csdn.net/javahighness/article/details/73929108)。

猜你喜欢

转载自blog.csdn.net/wangpeng322/article/details/81330327
今日推荐