浅谈使用PageHelper-Mybatis通用分页插件

2023-03-03 20:43:14 浏览数 (1)

代码语言:javascript复制
https://github.com/pagehelper/Mybatis-PageHelper

Mybatis 框架的分页插件 PageHelper,目前支持 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL 等多种数据库分页。
插件目前支持以下数据库的物理分页 PageAutoDialect:
static {
        //注册别名
        registerDialectAlias("hsqldb",HsqldbDialect.class);
        registerDialectAlias("h2",HsqldbDialect.class);
        registerDialectAlias("phoenix",HsqldbDialect.class);
        registerDialectAlias("postgresql",PostgreSqlDialect.class);
        registerDialectAlias("mysql",MySqlDialect.class);
        registerDialectAlias("mariadb",MySqlDialect.class);
        registerDialectAlias("sqlite",MySqlDialect.class);
        registerDialectAlias("herddb",HerdDBDialect.class);
        registerDialectAlias("oracle",OracleDialect.class);
        registerDialectAlias("oracle9i",Oracle9iDialect.class);
        registerDialectAlias("db2",Db2Dialect.class);
        registerDialectAlias("informix",InformixDialect.class);
        //解决 informix-sqli #129,仍然保留上面的
        registerDialectAlias("informix-sqli",InformixDialect.class);
        registerDialectAlias("sqlserver",SqlServerDialect.class);
        registerDialectAlias("sqlserver2012",SqlServer2012Dialect.class);
        registerDialectAlias("derby",SqlServer2012Dialect.class);
        //达梦数据库,https://github.com/mybatis-book/book/issues/43
        registerDialectAlias("dm",OracleDialect.class);
        //阿里云PPAS数据库,https://github.com/pagehelper/Mybatis-PageHelper/issues/281
        registerDialectAlias("edb",OracleDialect.class);
        //神通数据库
        registerDialectAlias("oscar",OscarDialect.class);
        registerDialectAlias("clickhouse",MySqlDialect.class);
        //瀚高数据库
        registerDialectAlias("highgo",HsqldbDialect.class);
        //虚谷数据库
        registerDialectAlias("xugu",HsqldbDialect.class);
        //人大金仓数据库
        registerDialectAlias("kingbase",PostgreSqlDialect.class);
        }
<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <property name="dialect" value="mysql"/>
        <!-- 该参数默认为false -->
        <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
        <!-- 和startPage中的pageNum效果一样-->
        <property name="offsetAsPageNum" value="true"/>
        <!-- 该参数默认为false -->
        <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
        <property name="rowBoundsWithCount" value="true"/>
        <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
        <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
        <property name="pageSizeZero" value="true"/>
        <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
        <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
        <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
        <property name="reasonable" value="false"/>
        <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
        <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
        <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
        <!-- 不理解该含义的前提下,不要随便复制该配置 -->
        <property name="params" value="pageNum=start;pageSize=limit;"/>
        <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
        <property name="returnPageInfo" value="check"/>
    </plugin>
</plugins>
Maven配置
代码语言:javascript复制
<!-- Pagehelper 依赖 -->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.3.2</version>
</dependency>
mybatis-config.xml主配置文件
代码语言:javascript复制
插件插在<环境配置前面
<!--配置插件  -->
    <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor"/>
    </plugins>
接口
代码语言:javascript复制
//测试使用PageHelper
    List<User> selectALL();
Mapper
代码语言:javascript复制
<select id="selectALL" resultType="org.example.daomain.User">
        SELECT * FROM TEST1 order by p_id
    </select>
测试类
代码语言:javascript复制
@Test
public void selectALL(){
    SqlSession sqlSession = MyBatisUtils.getSqlSessionAuto();
    UserDao dao = sqlSession.getMapper(UserDao.class);
    //加入pagehelper的方法,分页
    //pageNum:从第1页开始
    //pagesize:每页4行数据
    PageHelper.startPage(1,4);
    List<User> users = dao.selectALL();
    users.forEach(u-> System.out.println(u));
}

0 人点赞