Uni-Page 是一个基于 Java 的通用分页框架,它通过抽象化的设计,为不同数据源提供统一的分页查询接口。框架采用模块化架构,现目前集成 JDBC、Mybatis、MongoDB、Elasticsearch 等多种数据源,并提供了灵活的扩展机制。
框架的核心设计围绕四个关键组件展开:
-
分页语句(PaginationStatement)
- 支持任意语言的分页查询语句定义
- 提供统一的分页参数接口
- 允许自定义分页逻辑
-
分页执行器(PaginationStatementExecutor)
- 负责执行分页查询语句
- 提供分页信息查询功能
- 可扩展的执行器机制
-
分页结果集(PaginationResultSet)
- 统一的结果集接口
- 支持按列名和索引访问数据
- 提供类型转换功能
- 类似 JDBC ResultSet 的设计
-
结果集处理器(PaginationResultSetHandler)
- 支持自定义结果集转换
- 提供对象映射功能
-
统一性
- 提供统一的分页查询接口
- 屏蔽不同数据源的实现差异
- 简化分页查询的使用方式
-
灵活性
- 支持自定义分页语句
- 允许扩展执行器
- 提供丰富的结果集处理方式
-
可扩展性
- 模块化设计
- 支持新数据源的快速接入
- 提供扩展点机制
-
易用性
- 简单直观的 API
- 完善的类型转换
- 丰富的工具类支持
- 需要统一管理多个数据源分页查询的项目
- 需要支持多种数据源分页的企业级应用
核心分页库,提供基础的分页接口和抽象实现。
JDBC 数据源支持模块,提供基于 JDBC 的分页实现。
MyBatis 集成模块,提供与 MyBatis 框架的集成支持。
MongoDB 数据源支持模块,提供基于 MongoDB 的分页实现。
Elasticsearch 数据源支持模块,提供基于 ES 的分页实现。
Spring MVC 环境下的分页支持模块,提供与 Spring MVC 的集成支持,就像编写普通的控制器一样简单。
- 分页参数自动绑定
- 分页结果自动转换
Spring Boot Web 环境下的分页测试模块,提供分页功能的集成测试。
<dependency>
<groupId>com.github.ethancarter</groupId>
<artifactId>uni-page-jdbc</artifactId>
<version>1.9</version>
</dependency>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<User> page = operations.queryForResultSet(statement, new JdbcBeanPropertyPaginationRowMapper<>(User.class));
}
// User实体类
class User {
private Long id;
private String username;
// getters and setters
}
}在开发这个框架的过程中,我深受开源社区的影响和启发。感谢那些无私分享技术经验的大佬们,是你们的智慧和贡献让这个框架得以诞生。特别感谢那些优秀开源项目带来的设计灵感和实现思路,这些宝贵的经验让我能够站在巨人的肩膀上继续前行。
感谢所有为开源社区做出贡献的技术大佬们!
如果你觉得这个项目对你有帮助,欢迎点击右上角的 ⭐Star 支持我!