Mybatis分页查询实现(MySQL)
在处理大量数据时,经常需要对查询结果进行分页展示,以提高用户体验和系统性能。而针对MySQL数据库,Mybatis提供了简单而强大的分页查询实现。
概述
Mybatis是一个优秀的基于Java的持久层框架,它通过XML或注解的方式,将数据库操作与Java代码解耦,让开发者可以更专注于业务逻辑的实现。Mybatis提供了丰富的功能,其中包括对分页查询的支持。
本文将以MySQL数据库为例,介绍如何使用Mybatis实现分页查询。我们将使用Mybatis的XML方式配置,并结合Spring框架进行整合。
准备工作
在开始之前,我们需要先准备好以下的环境和工具:
- Java开发环境(JDK)
- Maven构建工具
- MySQL数据库
- 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.properties
或application.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.properties
或application.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