# mybatis-pagination
**Repository Path**: itlangz/mybatis-pagination
## Basic Information
- **Project Name**: mybatis-pagination
- **Description**: MyBatis 分页插件
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: http://www.itlangzi.com
- **GVP Project**: No
## Statistics
- **Stars**: 7
- **Forks**: 0
- **Created**: 2019-07-15
- **Last Updated**: 2025-05-23
## Categories & Tags
**Categories**: database-dev
**Tags**: None
## README
# MyBatis-pagination 介绍
`Mybatis` 是一个优秀的 `ORM` 框架,平时使用的也很广泛;但它并没有提供分页的功能,好在它提供了插件的机制,允许开发者自定义处理,这样我们就可以实现一个通用的分页插件。
## 基本功能
1. 在 `Mapper` 查询方法中任意参数传入 `com.itlangzi.mybatis.page.Pagination` 对象,并正确设置 `page` 和 `size` 即可认定是分页查询
2. 支持 `MySQL/Mariadb`,`Oracle`,`SQL Server 2012` 分页
3. 自动判断分页方言,无需配置, 多数据源切换后依然能正确识别分页方言
4. 支持直接返回 `com.itlangzi.mybatis.page.Pagination` 对象
5. 支持和 `Spring Boot`、普通使用 `MyBatis` 项目集成
## 集成说明
需要在 `pom.xml` 中添加依赖
```xml
org.mybatis.spring.boot
mybatis-spring-boot-autoconfigure
1.3.2
org.mybatis
mybatis-spring
1.3.2
```
### 1. 普通项目集成
**在 `MyBatis-config.xml` 配置文件中添加如下配置**
```xml
```
### 2. `Spring Boot 集成`
需要添加依赖
**2.1 编码式集成**
```java
@org.springframework.context.annotation.Configuration
public class MyBatisConfiguration implements ConfigurationCustomizer {
@Override
public void customize(Configuration configuration) {
// 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn
// 的类似映射。默认false
configuration.setMapUnderscoreToCamelCase(true);
configuration.setLogPrefix("MyBatis-");
// 设置分页工厂
configuration.addInterceptor(registryPaginationInterceptor());
configuration.setCacheEnabled(true);
// 设置自定义的分页包装类工厂
configuration.setObjectWrapperFactory(new PaginationWrapperFactory());
// 设置分页工厂
configuration.setObjectFactory(new PaginationFactory());
}
public Interceptor registryPaginationInterceptor() {
return new PaginationInterceptor();
}
}
```
**2.2 配置式集成**
2.2.1 `MyBatis-config.xml` 中添加如下配置
```xml
```
2.2.2 `application.yml` 添加配置
```yml
mybatis:
config-location: classpath*:mybatis/mybatis-config.xml
```
## 使用示例
`DemoMapper.xml`
```xml
```
`DemoMapper.java`
```java
class DemoMapper{
Pagination findByPage(Demo demo, Pagination page);
}
```
## 注意事项
1. 若使用分页,返回对象可以直接使用 `List` 接收,但建议返回 `Pagination`, 程序中会有额外的处理;直接返回 `List` 有内存溢出的风险;若执意要返回 `List`, 可以在拦截器或过滤器的后置处理中添加代码 `PaginationHelper.clear()`;可有效防止该情况发生
2. 若 `page` 和 `size` 字段值设置不合法(一般 `page` 大于等于 `0`, `size` 大于 `0`), 将不会进行分页处理
3. 该项目除 `mybatis` 依赖外,还额外依赖 `druid` 用于`SQL` 语句的处理、`slf4j-api` 用于日志打印;若项目中已经有此依赖可在依赖中排除