• 后端——框架——持久层框架——Mybatis——补充——pageHelper(分页)插件


      Pagehelper插件的知识点大致可以分为三个部分

    1. 搭建环境,引入jar包,配置。
    2. 使用方式,只需要记住一种即可。类似于在写SQL语句中,可以left join,也可以right join,它们实现的功能是相同的,习惯使用一种即可。
    3. 参数,在使用参数之前,首先需要了解使用方式,因为某些参数只有在特定的使用方式下才有意义。

    1、配置

      在配置之前首先需要引入jar包,在pom文件中添加

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>最新版本</version>
    </dependency>
    

      我使用的版本是5.1.4

      配置插件的方式有两种,在mybatis-config中的plugins标签中配置,在spring,或者是springboot中将pageInteceptor类注入,并与SqlSessionFactoryBean相关联。

    1.1  Mybatis配置文件

      在Mybatis-config.xml中配置plugins标签,配置如下:

    <!-- 配置插件 -->
    <plugins>
    	<plugin interceptor="com.github.pagehelper.PageInterceptor">
    		<property name="" value="">
    	</plugin>
    </plugins>
    

      此时需要注意plugins标签的顺序。

    1.2  Spring 

    <!-- 注入pageInterceptor对象 -->
    <bean id="pagehelper" class="com.github.pagehelper.PageInterceptor">
    	<property name="properties">
    	  <!--使用下面的方式配置参数,一行配置一个 -->
    	  <value>
    	    params=value1
    	  </value>
    	</property>
    </bean>
    
    <!-- 与sqlSessionFactory对象绑定 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <!--  对应类中的 Interceptor[] plugins 属性 -->
      <property name="plugins">
        <array>
        	<bean ref="pagehelper">
        </array>
      </property>
    </bean>
    

      Springboot也需要经历这两个步骤,只不过通过代码形式,首先使用@Bean注解将PageInterceptor对象注入,之后注入SqlSessionFactoryBean对象,并设置它的plugins属性

    2、使用方式

      在官网上定义了6种使用方式,它们实现的功能是相同的,实现方式是不同的,习惯使用一种即可,我比较习惯使用PageHelper.startPage的方式。

      原著中提到的六种使用方式如下:

    1. 使用RowBound对象的方式。
    2. 使用PageHelper.startPage的方式
    3. 使用PageHelper.offsetPage的方式
    4. 在Mapper接口中添加分页参数的方式
    5. 在Mapper接口中添加对象的方式,对象封装了分页的信息
    6. 会用ISelect接口的方式。

    2.1   RowBound

      RowBound对象封装了分页信息,第一个参数表示从结果集的第几条数据开始,第二个参数表示数据返回的条数。

      当使用此方式时,

      可以设置rowBoundsWithCount参数,它的值为true时,会在分页查询之前执行一条count查询。它的默认值为false

      可以设置offsetAsPageNum参数,它的含义是将第一个参数的含义从offset改变为pageNum。

    2.2   startPage方法

      调用PageHelper.startPage方法,它的第一个参数为pageNum,它的第二个参数为pageSize,它是最常用的一种方式,在使用时需要注意查询方法必须紧跟在startPage方法之后。

      当使用此方式时,

      可以设置reasonable参数,它的意义是保证pageNum和pageSize的合理性。默认值为false。

      可以设置pageSizeZero参数,值为true时,如果pageSize参数值为0时,会查询所有的结果。

    2.3 offSet方法

      调用PageHelper.offset方法,它的第一个参数为offset,它的第二个参数为limit,参数的含义与RowBound对象的参数含义相同。

           在使用时需要注意查询方法必须紧跟在offset方法之后。

    2.4   分页参数的方式

      在Mapper的查询方法上添加分页信息,例如pageNum,pageSize。

      当使用此方法时,

      可以设置supportMethodsArguments参数,它的值为true时,会从查询方法中获取分页参数,它的默认值为false

      可以设置params参数,它是建立分页参数与查询方法参数名称之间的映射关系,默认情况下查询方法上添加pageNum,pageSize参数时,会转换为对应的分页参数,如果方法上的参数名称不是pageNum,例如pageNumber时,此时无法识别该参数,需要建立映射pageNumber=pageNum

    2.5   对象的方式

      与分页参数的方式基本相同,区别在于是将分页参数封装为对象,并将对象传入查询方法。

    2.6  ISelect接口方式

    Page<Object> page = PageHelper.startPage(pageNum, pageSize).doSelectPage(()-> userMapper.selectMethod());
    

      需要JDK版本为1.8以上,否则以匿名内部类方式会比较麻烦。

    3、其他参数

      其他参数使用默认值即可。

    1. helperDialect:数据库方言,区分数据库的类型,分页插件会自动检测。
    2. closeConn:在执行完SQL语句之后,是否自动关闭获取的连接,默认为true。
    3. aggregateFunctions:在执行查询语句之前,会执行一次count语句(聚合函数),值为聚合函数的名称,方法中的参数为列名。使用默认的count(*)即可。
    4. autoRuntimeDialect:默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页。

    4、注意事项

      参考官网的重要提示

  • 相关阅读:
    轻量级分布式任务调度框架(二、LTS编译、打包、部署)
    轻量级分布式任务调度框架(一、LTS简介、特点、工作流程)
    MySQL数据库学习一
    Navicat 连接 SQL Server 数据库,报错 08001
    noVNC 遇到一个错误: Uncaught TypeError: Cannot read property 'forEach' of undefined
    加强自己VPS服务器安全的一次经历
    Python 编码错误的本质和解决方案
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'data' at line 1
    requests爬虫请求报错:UnicodeEncodeError: 'latin-1' codec can't encode character 'u2026' in position 30
    docker无法删除镜像,Error: No such container,附docker常用命令
  • 原文地址:https://www.cnblogs.com/rain144576/p/12228880.html
Copyright © 2020-2023  润新知