美文网首页SSM+shiro等
SSM集成PageHelper分页插件

SSM集成PageHelper分页插件

作者: 蔓越莓饼干 | 来源:发表于2017-04-23 13:38 被阅读1635次

    本文部分内容摘选自PageHelper GitHub,可按照文中步骤进行插件快速集成

    一、Maven配置

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.0.0</version>
    </dependency> ```
    #### 二、 SqlSessionFactoryBean配置
    

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="readWriteDataSource"/>

    <property name="typeAliasesPackage" value="com.tg..entity"/>

    <property name="mapperLocations" value="classpath:mybatis/
    /Mapper.xml"/>

    <property name="plugins">
    <array>
    <bean class="com.github.pagehelper.PageInterceptor">

    <property name="properties">
    <value>
    helperDialect=mysql
    reasonable=true
    supportMethodsArguments=true
    </value>
    </property>
    </bean>
    </array>
    </property>
    </bean>

    #### 三、分页插件参数介绍
    分页插件提供了多个可选参数,这些参数使用时,按照上面两种配置方式中的示例配置即可。
    
    分页插件可选参数如下:
    
    - *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` 时,`pageNum<=0` 时会查询第一页, `pageNum>pages`(超过总数时),会查询最后一页。默认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<User> userList = userService.query(userParams);
    PageInfo<PaymentRequest> result = new PageInfo<>(userList );
    System.out.println(result.getTotal());
    System.out.println(result.getPageNum());
    System.out.println(result.getList().size());

    
    **TODO:集成后可将代码中所有`count()`方法全部去掉**
    
    **注意**:`pageNum` 和 `pageSize` 两个属性同时存在才会触发分页操作,在这个前提下,其他的分页参数才会生效。

    相关文章

      网友评论

        本文标题:SSM集成PageHelper分页插件

        本文链接:https://www.haomeiwen.com/subject/dfwezttx.html