# Uni-Pagination 分页框架
Uni Pagination 是一个基于 Java 的通用分页框架,它通过抽象化的设计,为不同数据源提供统一的分页查询接口。框架采用模块化架构,现目前集成 JDBC、Mybatis、MongoDB、Elasticsearch 等多种数据源,并提供了灵活的扩展机制。
## 核心设计
框架的核心设计围绕四个关键组件展开:
1. **分页语句(PaginationStatement)**
- 支持任意语言的分页查询语句定义
- 提供统一的分页参数接口
- 允许自定义分页逻辑
2. **分页执行器(PaginationStatementExecutor)**
- 负责执行分页查询语句
- 提供分页信息查询功能
- 可扩展的执行器机制
3. **分页结果集(PaginationResultSet)**
- 统一的结果集接口
- 支持按列名和索引访问数据
- 提供类型转换功能
- 类似 JDBC ResultSet 的设计
4. **结果集处理器(PaginationResultSetHandler)**
- 支持自定义结果集转换
- 提供对象映射功能
## 设计目标
1. **统一性**
- 提供统一的分页查询接口
- 屏蔽不同数据源的实现差异
- 简化分页查询的使用方式
2. **灵活性**
- 支持自定义分页语句
- 允许扩展执行器
- 提供丰富的结果集处理方式
3. **可扩展性**
- 模块化设计
- 支持新数据源的快速接入
- 提供扩展点机制
4. **易用性**
- 简单直观的 API
- 完善的类型转换
- 丰富的工具类支持
## 适用场景
- 需要统一管理多个数据源分页查询的项目
- 需要支持多种数据源分页的企业级应用
## 核心模块
### [uni-pagination](https://github.com/taoganio/uni-pagination/tree/main/uni-pagination)
核心分页库,提供基础的分页接口和抽象实现。
### [uni-pagination-jdbc](https://github.com/taoganio/uni-pagination/tree/main/uni-pagination-jdbc)
JDBC 数据源支持模块,提供基于 JDBC 的分页实现。
### [uni-pagination-jdbc-mybatis](https://github.com/taoganio/uni-pagination/tree/main/uni-pagination-mybatis)
MyBatis 集成模块,提供与 MyBatis 框架的集成支持。
### [uni-pagination-mongodb](https://github.com/taoganio/uni-pagination/tree/main/uni-pagination-mongodb)
MongoDB 集成组件,用于支持 MongoDB 的分页查询。
### [spring-boot-starter-web-uni-pagination](https://github.com/taoganio/uni-pagination/tree/main/spring-boot-starter-web-uni-pagination)
Spring MVC 环境下的分页支持模块,提供与 Spring MVC 的集成支持,就像编写普通的控制器一样简单。
- 分页参数自动绑定
- 分页结果自动转换
### [web-uni-pagination-test](https://github.com/taoganio/uni-pagination/tree/main/web-uni-pagination-test)
Spring Boot Web 环境下的分页测试模块,提供分页功能的集成测试。
## 快速开始, 以uni-pagination-jdbc为例
### Maven 依赖
```xml
io.github.taoganio
uni-pagination-jdbc
1.0.0
```
### 简单示例
```java
public class PaginationTest {
public void page() {
PaginationStatementTemplate operations = new PaginationStatementTemplate();
operations.addStatementExecutor(new Sql2oPaginationNamedParameterStatementExecutor(dataSource));
// 1. 创建分页语句
PaginationStatement statement = of(b -> b
.sql("SELECT * FROM user WHERE username LIKE :username")
.paramMap("username", "%admin%")
.pageable(0, 10)
.sort("id", Sort.Direction.DESC));
// 2. 执行查询
PageInformation information = operations.queryForInformation(statement);
Page page = operations.queryForResultSet(statement, new JdbcBeanPropertyPaginationRowMapper<>(User.class));
}
// User实体类
class User {
private Long id;
private String username;
// getters and setters
}
}
```
## 致谢
在开发这个框架的过程中,我深受开源社区的影响和启发。感谢那些无私分享技术经验的大佬们,是你们的智慧和贡献让这个框架得以诞生。特别感谢那些优秀开源项目带来的设计灵感和实现思路,这些宝贵的经验让我能够站在巨人的肩膀上继续前行。
感谢所有为开源社区做出贡献的技术大佬们!
## 🌟 支持项目
如果你觉得这个项目对你有帮助,欢迎点击右上角的 ⭐Star 支持我!