SSM集成PageHelper分页插件
本文部分内容摘选自PageHelper GitHub,可按照文中步骤进行插件快速集成
一、Maven配置 com.github.pagehelper pagehelper 5.0.0 “`#### 二、 SqlSessionFactoryBean配置
helperDialect=mysqlreasonable=truesupportMethodsArguments=true
#### 三、分页插件参数介绍分页插件提供了多个可选参数,这些参数使用时,按照上面两种配置方式中的示例配置即可。分页插件可选参数如下:- *dialect*:默认情况下会使用 `PageHelper`方式进行分页,如果想要实现自己的分页逻辑,可以实现 `Dialect(com.github.pagehelper.Dialect)` 接口,然后配置该属性为实现类的全限定名称。下面几个参数都是针对默认 `dialect` 情况下的参数。使用自定义 `dialect` 实现时,下面的参数没有任何作用。- *helperDialect*:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置`helperDialect`属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:`oracle`,`mysql`,`mariadb`,`sqlite`,`hsqldb`,`postgresql`,`db2`,`sqlserver`,`informix`,`h2`,`sqlserver2012`,`derby`**特别注意**:使用 `SqlServer2012` 数据库时,需要手动指定为 `sqlserver2012`,否则会使用 `SqlServer2005` 的方式进行分页。你也可以实现 `AbstractHelperDialect`,然后配置该属性为实现类的全限定名称即可使用自定义的实现方法。- *offsetAsPageNum*:默认值为 `false`,该参数对使用 `RowBounds` 作为分页参数时有效。 当该参数设置为 `true` 时,会将 `RowBounds` 中的 `offset` 参数当成 `pageNum` 使用,可以用页码和页面大小两个参数进行分页。- *rowBoundsWithCount*:默认值为`false`,该参数对使用 `RowBounds` 作为分页参数时有效。 当该参数设置为`true`时,使用 `RowBounds` 分页会进行 `count`查询。- *pageSizeZero*:默认值为 `false`,当该参数设置为 `true` 时,如果 `pageSize=0` 或者 `RowBounds.limit = 0` 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 `Page` 类型)。- *reasonable*:分页合理化参数,默认值为`false`。当该参数设置为 `true` 时,`pageNumpages`(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。- *params*:为了支持`startPage(Object params)`方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 `pageNum`,`pageSize`,`count`,`pageSizeZero`,`reasonable`,不配置映射的用默认值, 默认值为`pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero`。- *supportMethodsArguments*:支持通过 `Mapper` 接口参数来传递分页参数,默认值`false`,分页插件会从查询方法的参数值中,自动根据上面 `params` 配置的字段中取值,查找到合适的值时就会自动分页。 使用方法可以参考测试代码中的 `com.github.pagehelper.test.basic` 包下的 `ArgumentsMapTest` 和 `ArgumentsObjTest`。- *autoRuntimeDialect*:默认值为 *`false`*。设置为 *`true`* 时,允许在运行时根据多数据源自动识别对应方言的分页 (不支持自动选择`sqlserver2012`,只能使用`sqlserver`),用法和注意事项参考下面的场景五。- *closeConn*:默认值为 `true`。当使用运行时动态数据源或没有设置 `helperDialect` 属性自动获取数据库类型时,会自动获取一个数据库连接, 通过该属性来设置是否关闭获取的这个连接,默认`true`关闭,设置为 `false` 后,不会关闭获取的连接,这个参数的设置要根据自己选择的数据源来决定。**重要提示**:当 `offsetAsPageNum=false` 的时候,由于 `PageNum` 问题,`RowBounds`查询的时候 `reasonable` 会强制为 *`false`*。使用 `PageHelper.startPage` 方法不受影响。#### 四、项目集成经过实际项目中的测试,总结出如下两种使用方式:> – 用`PageHelper.startPage(pageNum, pageSize);`方式进行分页设置,代码侵入小,只需要在调用`initPage()`方法中加入此代码即可;> – 使用参数传递的方式,此方法不支持`@Param(“xxx”)`注解,改造起来相对费时。**代码参考**
List userList = userService.query(userParams);PageInfo result = new PageInfo(userList );System.out.println(result.getTotal());System.out.println(result.getPageNum());System.out.println(result.getList().size());
**TODO:集成后可将代码中所有`count()`方法全部去掉****注意**:`pageNum` 和 `pageSize` 两个属性同时存在才会触发分页操作,在这个前提下,其他的分页参数才会生效。