Mybatis分页查询实现(MySQL)

在处理大量数据时,经常需要对查询结果进行分页展示,以提高用户体验和系统性能。而针对MySQL数据库,Mybatis提供了简单而强大的分页查询实现。

概述

Mybatis是一个优秀的基于Java的持久层框架,它通过XML或注解的方式,将数据库操作与Java代码解耦,让开发者可以更专注于业务逻辑的实现。Mybatis提供了丰富的功能,其中包括对分页查询的支持。

本文将以MySQL数据库为例,介绍如何使用Mybatis实现分页查询。我们将使用Mybatis的XML方式配置,并结合Spring框架进行整合。

准备工作

在开始之前,我们需要先准备好以下的环境和工具:

  1. Java开发环境(JDK)
  2. Maven构建工具
  3. MySQL数据库
  4. Mybatis和Spring的依赖库

本文的代码示例将使用Spring Boot进行演示,因此不需要独立安装Spring框架。

步骤

1. 创建数据库表

首先,我们需要在MySQL数据库中创建一个简单的用户表,用于存储用户信息。可以使用以下DDL语句创建表:

CREATE TABLE `user` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(100) NOT NULL,
  `age` INT NOT NULL
);

2. 配置数据源和Mybatis

在Spring Boot的配置文件(application.propertiesapplication.yml)中,配置数据库连接信息和Mybatis相关属性。示例如下:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis_demo?useSSL=false&serverTimezone=UTC
    username: root
    password: 123456

mybatis:
  mapper-locations: classpath:mapper/*.xml

3. 创建实体类和Mapper接口

创建一个与数据库表对应的实体类 User,并使用注解@Table指定对应的表名。代码示例如下:

import javax.persistence.Table;

@Table(name = "user")
public class User {
    private Integer id;
    private String name;
    private Integer age;
    
    // 省略getter和setter方法
}

然后,创建一个Mapper接口 UserMapper,用于定义数据库操作的方法。代码示例如下:

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Select;

public interface UserMapper {
    @Select("SELECT * FROM user")
    List<User> findAll();
    
    // 其他数据库操作方法...
}

4. 编写分页查询方法

UserMapper接口中,我们定义一个用于分页查询的方法 findPage。这个方法接受两个参数:页码和每页显示的记录数。代码示例如下:

import org.apache.ibatis.annotations.Param;

public interface UserMapper {
    // ... 省略其他方法
    
    @Select("SELECT * FROM user LIMIT #{offset}, #{pageSize}")
    List<User> findPage(@Param("offset") int offset, @Param("pageSize") int pageSize);
}

5. 配置分页插件

Mybatis并没有内置的分页功能,但我们可以借助第三方插件来实现分页查询。在这里,我们使用PageHelper插件。

首先,我们需要在pom.xml文件中添加PageHelper的依赖:

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

然后,在application.propertiesapplication.yml中配置PageHelper的属性:

pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql

6. 实现分页查询

UserMapper接口中,我们需要添加一个返回查询总记录数的方法:

public interface UserMapper {
    // ... 省略其他方法
    
    @Select("SELECT COUNT(*) FROM user")
    int count();
}

然后,我们可以在Service或Controller层调用findPage方法进行分页查询。代码示例如下:

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

@Service