SpringBoot集成MyBatis的分页插件PageHelper实例代码

下面就为大家详细讲解“SpringBoot集成MyBatis的分页插件PageHelper实例代码”的完整攻略。

简介

在使用 MyBatis 进行数据库操作时,MySQL主要的限制在于分页查询。但是 Mybatis 配合 PageHelper 便可以轻松解决这个问题。本文将介绍如何在 SpringBoot 中使用 MyBatis 分页插件 PageHelper。

步骤

1. 添加依赖

pom.xml 文件中添加 PageHelper 和 MyBatis 的依赖:

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper-spring-boot-starter</artifactId>
  <version>1.2.13</version>
</dependency>

<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>2.0.0</version>
</dependency>

2. 配置 PageHelper

application.yml 文件中添加以下配置:

pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

3. 使用 PageHelper

在 DAO 层的查询方法上添加如下的分页查询配置:

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

public interface UserMapper {
  @Select("SELECT * FROM user")
  List<User> findAll();

  @Select("SELECT * FROM user WHERE id=#{id}")
  User findById(@Param("id") Long id);

  @Insert("INSERT INTO user(name, age, email) VALUES(#{name}, #{age}, #{email})")
  int insert(User user);

  @Update("UPDATE user SET name=#{name}, age=#{age}, email=#{email} WHERE id=#{id}")
  int update(User user);

  @Delete("DELETE FROM user WHERE id=#{id}")
  int delete(@Param("id") Long id);

  // 使用 PageHelper 动态分页查询
  @Select("SELECT * FROM user ORDER BY id")
  List<User> findAllByPage();

}

在 service 层中调用 PageHelper 对应的方法实现用户列表的分页查询:

@Service
public class UserServiceImpl implements UserService {

  @Autowired
  private UserMapper userMapper;

  @Override
  public PageInfo<User> findAllByPage(int pageNum, int pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List<User> userList = userMapper.findAllByPage();
    PageInfo<User> pageInfo = new PageInfo<>(userList);
    return pageInfo;
  }

}

4. 测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {

  @Autowired
  private UserService userService;

  @Test
  public void testFindAllByPage() {
    PageInfo<User> pageInfo = userService.findAllByPage(1, 2);
    System.out.println("总记录数:" + pageInfo.getTotal());
    System.out.println("总页数:" + pageInfo.getPages());
    System.out.println("当前页码:" + pageInfo.getPageNum());
    System.out.println("每页记录数:" + pageInfo.getPageSize());
    System.out.println("结果集:" + pageInfo.getList());
  }

}

测试结果:

总记录数:4
总页数:2
当前页码:1
每页记录数:2
结果集:[User(id=1, name=Tom, age=20, email=tom@163.com), User(id=2, name=Jack, age=22, email=jack@163.com)]

另外,还可以使用注解的方式实现分页:

@Select("SELECT * FROM user")
@Options(useGeneratedKeys = true, keyProperty = "id")
List<User> getAllUserByPage(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize);

注解方式和上面介绍的方法是等价的。

总结

本文介绍了在 SpringBoot 中如何集成 MyBatis 分页插件 PageHelper,以及两种不同的使用方式。PageHelper 在实际项目中使用非常方便,可以节省大量的代码量和时间。希望本文能对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot集成MyBatis的分页插件PageHelper实例代码 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • Spring security用户URL权限FilterSecurityInterceptor使用解析

    下面是关于Spring security用户URL权限FilterSecurityInterceptor使用解析的完整攻略。 内容概述 Spring Security作为一个强大的安全框架,自然有着很多功能和API。其中,URL访问权限控制是一项非常核心和基础的功能。FilterSecurityInterceptor就是Spring Security框架中用…

    Java 2023年5月20日
    00
  • java反射的一些理解

    首先简单介绍下java反射的应用场景:java反射多用于框架设计中。 其次,简述下框架:可重复用的,用来提高编程效率的代码。一些重复性的工作不需要在去开发,直接利用框架集成起来,用的时候调用框架,传递参数等等。 再次,介绍下java反射获取类对象的三种方式: Class.forName(“全限定类名”):这种用的最常见,也最符合反射的理念,参数可以是字符串,…

    Java 2023年4月22日
    00
  • 如何在Java中优雅地判空详解

    如何在Java中优雅地判空详解 在Java开发中,判断对象是否为空是一个非常常见的操作。但是,如果不注意判空的方式和实现,容易导致代码可读性差、冗长、容易出错等问题。本文将介绍几种优雅的判空方式,帮助Java开发者写出更简洁、易读、易维护的代码。 使用Objects工具类 Java8中新增的Objects类提供了一系列静态方法,用于判断对象是否为空。例如: …

    Java 2023年5月26日
    00
  • java实现银行家算法(Swing界面)

    Java实现银行家算法(Swing界面)攻略 银行家算法(Banker’s Algorithm)是一种经典的死锁预防算法,常用于操作系统中。在多进程环境下,进程需要占用资源,但是资源并不足够,如果资源分配策略不合理,则可能会出现死锁的情况。银行家算法通过资源的最大需求量和已分配需求量来判断分配资源是否会导致死锁的发生,从而保障系统运行的安全性。 本文基于Ja…

    Java 2023年5月19日
    00
  • Spring Boot 员工管理系统超详细教程(源码分享)

    下面我会详细讲解一下“Spring Boot员工管理系统超详细教程(源码分享)”这篇文章的完整攻略。 标题 首先,在文章的开头应该使用H1标题,来让读者清楚地了解主题,如下: Spring Boot员工管理系统超详细教程(源码分享) 简介 接下来,需要在文章的正文中,简介该教程的目的和基本情况,如下: 本教程旨在通过一个完整的Spring Boot项目示例,…

    Java 2023年5月24日
    00
  • JavaEE SpringMyBatis是什么? 它和Hibernate的区别及如何配置MyBatis

    JavaEE SpringMyBatis是JavaEE开发的一种技术栈组合,主要包含Spring框架和MyBatis持久层框架,用于简化JavaEE应用程序的开发和管理。下面分别详细讲解JavaEE、Spring和MyBatis以及它们之间的区别,最后提供MyBatis的配置攻略和示例。 JavaEE是什么? JavaEE(Java Enterprise E…

    Java 2023年5月19日
    00
  • springsecurity 企业微信登入的实现示例

    下面就详细讲解如何实现“spring security 企业微信登录”的攻略。 概述 企业微信登录是企业内部应用中常见的一种登录方式,通过企业微信统一授权登录,可以实现企业内部员工对应用的授权验证,保证内部应用的安全性。本文将以Spring Security框架为基础,介绍如何实现企业微信登录。 步骤 1. 创建企业微信应用和测试用户 首先需要在企业微信后台…

    Java 2023年6月3日
    00
  • java 中Map详解及实例代码

    下面是完整的“java 中Map详解及实例代码”攻略。 什么是Map? Map是一种用来存储键-值对数据的数据结构,常用于数据缓存、数据筛选等场景。 Map是一种抽象的数据类型,Java中通过接口Map来定义Map类型。Map接口的实现类有:HashMap、TreeMap、LinkedHashMap 等。 HashMap 什么是HashMap HashMap…

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