spring boot集成pagehelper(两种方式)

下面我会详细讲解Spring Boot集成PageHelper的两种方式及相应的示例。

方式一:使用PageHelper Starter

  1. 第一步:在pom.xml文件中添加以下依赖:
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>
  1. 在Spring Boot的主配置文件中添加以下配置:
mybatis:
  # 开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true
  # 使用PageHelper插件
  mapper:
    mappers:
      - com.github.abel533.mapper.Mapper
    # 配置 PageHelper 插件
    helper-dialect: mysql
    reasonable: true
    support-methods-arguments: true
    params: count=countSql
    auto-runtime-dialect: true
    close-abandoned: true
    max-active: 20
    max-wait: 60000

说明:
* helper-dialect: 指定PageHelper使用的数据库方言,这里是mysql。
* reasonable: 分页参数合理化,默认值为 false。当该参数设置为 true 时,pageNum<=0 时会查询第一页,pageNum>pages(超过总数时),会查询最后一页。设置为true时,也会将pagesize>total的设为等于total。(默认值为false)。
* support-methods-arguments: 支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面配置的参数属性名提取pageNum和pageSize作为分页参数。
* params: PageHelper提供了一个默认实现类,也可以自己扩展,自定义的需要重写PageInterceptor类,并将自定义的PageInterceptor的名称配置到params节点,这里我们使用PageHelper默认的实现类。
* auto-runtime-dialect: 自动获取运行时的数据源,此时必须配置该属性为true。
* close-abandoned: 是否关闭长时间不使用采用未关闭的数据连接。默认false打开。
* max-active: 最大连接数。
* max-wait: 获取连接最大等待时间。

  1. 在Mapper接口的方法上添加@Select注解,如下所示:
@Select("SELECT * FROM user")
List<User> getAllUser();
  1. 在需要分页的Mapper接口方法上添加@Select注解并传入分页参数,如下所示:
@Select("SELECT * FROM user")
List<User> getAllUser(Page<User> page);

至此,我们已经完成了使用PageHelper Starter集成Spring Boot的示例。

方式二:手动集成PageHelper

  1. 第一步:在pom.xml文件中添加以下依赖:
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.2.1</version>
</dependency>
  1. 在Spring Boot的主配置文件中添加以下配置:
mybatis:
  # 开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true
  # 开启日志
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  #自定义PageHelper插件,参数参考PageHelper官方文档
  #这里配置mysql,根据需要调整
  plugin:
    limit:
      # mapper接口方法名以ByPage结尾的进行分页
      mapperMethod: .*ByPage$
      dialect: mysql
      helperDialect: mysql
      offsetAsPageNum: true
      rowBoundsWithCount: true
      pageSizeZero: true
      reasonable: true
      params: count=countSql
      autoRuntimeDialect: true

说明:
* mapperMethod: 指定 PageHelper 对哪些 Mapper 接口方法进行拦截,默认情况下,所有继承自 Mybatis 的抽象方法(Abstract Method)都会被拦截(这里设置以ByPage结尾的方法才被拦截)。
* dialect:指定数据库方言,这里是mysql。
* helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。
* offsetAsPageNum:页码数偏移量,适用于从第1页开始显示数据的场景。
* rowBoundsWithCount:是否进行 count 查询。
* pageSizeZero:分页合理化参数,即当页面大小为 0 或者查询的结果集为空时是否返回数据。
* reasonable:分页合理化参数,即是否合理化分页信息。默认值为 false。
* params: PageHelper提供了一个默认实现类,也可以自己扩展,自定义的需要重写PageInterceptor类,并将自定义的PageInterceptor的名称配置到params节点,这里我们使用PageHelper默认的实现类。
* autoRuntimeDialect: 自动获取运行时的数据源,此时必须配置该属性为true。

  1. 自定义PageHelper拦截器,如下所示:
@Configuration
public class PageHelperConfig {

  @Bean
  public PageInterceptor pageInterceptor() {
    PageInterceptor pageInterceptor = new PageInterceptor();
    Properties props = new Properties();
    //拦截参数以ByPage结尾的方法
    props.setProperty("helperDialect", "mysql");
    props.setProperty("reasonable", "true");
    props.setProperty("supportMethodsArguments", "true");
    props.setProperty("params", "count=countSql");
    pageInterceptor.setProperties(props);
    return pageInterceptor;
  }

  @Bean
  public ConfigurationCustomizer configurationCustomizer() {
    return new ConfigurationCustomizer() {
      @Override
      public void customize(Configuration configuration) {
        configuration.addInterceptor(pageInterceptor());
      }
    };
  }
}
  1. 在Mapper接口的方法上添加@Select注解,如下所示:
@Select("SELECT * FROM user")
List<User> getAllUser();
  1. 在需要分页的Mapper接口方法上添加@Select注解并传入分页参数,如下所示:
@Select("SELECT * FROM user")
List<User> getAllUser(Page<User> page);

至此,我们已经完成了手动集成PageHelper的示例。

以上就是Spring Boot集成PageHelper的两种方式的完整攻略了。希望能为你提供帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot集成pagehelper(两种方式) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java的Struts框架报错“NoSuchModuleException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NoSuchModuleException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此。在这种情况下,需要检查配置以解决此问题。 模块名称错误:如果模块名称不正确,则可能出现此。在这种情况下,需要检查模块名称以解决此问题。 以下是两个实例: 例 1 如果配置文件中…

    Java 2023年5月5日
    00
  • Java web含验证码及权限登录实例代码

    下面是“Java web含验证码及权限登录实例代码”的完整攻略: 准备工作 在开始编写代码前,我们需要准备一些工作: 确保已经安装好Java开发环境,并且熟悉Java web开发基础知识。 安装一个Web服务器,比如Tomcat。 准备好一个关系数据库,比如MySQL。 功能概述 我们这里实现的是一个带有验证码和权限登录控制的Java Web应用。功能包括:…

    Java 2023年6月15日
    00
  • jdk与jre的区别 很形象,很清晰,通俗易懂

    下面是关于 “JDK与JRE的区别” 的详细讲解,希望对你有所帮助。 JDK与JRE的概念 在理解JDK与JRE的区别之前,我们先来简要了解一下这两个概念: Java Development Kit(JDK)是Java开发包,包含了Java的核心类库、编译器javac、JVM调试器jdb等开发工具,以及其他一些附属工具。 Java Runtime Envir…

    Java 2023年5月24日
    00
  • 关于Java中重定向传参与取值

    关于Java的重定向传参与取值的完整攻略如下: 1. 重定向传参 重定向(Redirect)是指将请求转发到另一个URL上的一种技术。在Java Web开发中,可以使用response.sendRedirect(String url)方法实现重定向。在重定向时,可以将参数传递给目标URL。具体实现步骤如下: 在源页面,使用以下代码进行重定向,并将参数添加到U…

    Java 2023年6月15日
    00
  • 详解微信小程序实现仿微信聊天界面(各种细节处理)

    详解微信小程序实现仿微信聊天界面(各种细节处理) 1. 概述 本攻略旨在利用微信小程序的基础组件和API实现仿微信聊天界面的功能。其中包括对聊天记录的渲染、语音和图片消息的处理、滚动条的实现、输入框的处理以及底部工具栏的实现等。 2. 渲染聊天记录 在小程序中,我们可以使用wx:for将聊天记录数组渲染到页面中。为了使聊天界面更加真实,我们需要对每一条聊天记…

    Java 2023年5月23日
    00
  • 较详细的JNI简介

    较详细的JNI简介 什么是JNI? JNI(Java Native Interface)是一种可用于Java代码与其他编程语言进行交互的编程接口。通过JNI,Java程序可以调用C、C++、汇编等语言编写的本地程序库,也可以让其他语言的程序调用Java本身的API。 JNI使用流程 编写本地程序库 首先,我们需要编写用其他编程语言如C、C++、汇编等编写的本…

    Java 2023年5月26日
    00
  • JAVA实现Base64编码的三种方式

    JAVA实现Base64编码的三种方式 Base64是一种用64个字符来表示二进制数据的方法,通常用于在HTTP等情境下传递二进制数据。在JAVA中,我们可以通过以下三种方式来进行Base64编码的实现。 1. 使用Java 8提供的java.util.Base64类(推荐使用) Java 8 中增加了一个 Base64 类,用于提供一种标准的Base64编…

    Java 2023年5月19日
    00
  • 利用java+mysql递归实现拼接树形JSON列表的方法示例

    下面是关于使用Java和MySQL递归生成树形JSON列表的攻略。 核心思路 树形结构实际上是一种递归结构,我们可以利用递归的思想来实现树形结构的生成。具体步骤如下: 从数据库中查询出所有的节点,包括节点的id、pid、name等信息; 创建根节点,将根节点放入节点列表中; 遍历节点列表,如果该节点的pid等于根节点的id,将该节点加入根节点的子节点中; 递…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部