跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何用Java实现分页查询通用组件_Java分页模型封装思路

Java分页查询通用组件核心是解耦业务与分页逻辑,通过Page模型封装分页信息、PageHandler接口定义查询契约、PageService模板自动处理校验与组装,并适配MyBatis/JPA/内存等多种数据源。 Java分页查询通用组件的核心在于解耦业务逻辑与分页参数处理,统一管理页码、每页条数、总记录数、数据列表等要素,并适配不同数据源(如MyBatis、JPA、内存集合等)。关键不是写死SQL或ORM调用,而是抽象出可复用的分页模型和执行契约。 定义通用分页模型(Page ) 封装分页基础信息,支持泛型,便于携带任意类型的数据列表: current :当前页码(从1开始,非0) size :每页数量 total :总记录数(用于计算总页数) pages :总页数(由 total / size 向上取整得出) list :当前页数据列表(List) hasPrevious / hasNext :是否含上/下一页(方便 前端 控制按钮显隐) 提供静态工厂方法如
Page.of(list, current, size, total)
,避免手动计算 pages 和边界校验。 设计分页执行器接口(PageHandler) 定义统一契约,让业务方只需关注“如何查总数”和“如何查当前页数据”,不关心分页参数转换: 立即学习 “ Java免费学习笔记(深入) ”; count() :返回 long 类型总记录数 list(int offset, int limit) :根据偏移量和限制查数据(适配 MySQL 的 LIMIT offset,limit 或 MyBatis 的 RowBounds) 实现类可包装 Mapper 接口调用、JPA Repository 查询、甚至 Stream 分页(适用于小数据量内存分页)。 Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 封装分页服务模板(PageService) 提供模板方法,自动完成参数校验、总数查询、数据查询、结果组装: 校验 current ≥ 1,size ∈ [1, 500](防恶意大页) 调用 count() 获取 total,若为 0 直接返回空 Page 计算 offset = (current - 1) * size 调用 list(offset, size) 获取当前页数据 用 Page.of() 组装并返回 该服务不依赖任何框架,仅依赖 PageHandler 接口,可注入任意具体实现。 适配主流框架的快捷封装 针对常用场景提供开箱即用的 PageHandler 实现: MyBatis + XML :传入 SqlSession 和两个 mapper 方法名(countSqlId、listSqlId),用反射或 LambdaMetafactory 调用 MyBatis-Plus :直接使用 IPage + Page 对象,包装成 PageHandler 返回 IPage::getRecords 和 IPage::getTotal JPA :基于 Pageable 构造,调用 JpaRepository::count + findAll(Pageable) 内存分页(List) :用 Collections.subList 做切片,count() 直接返回 list.size() 对外暴露统一入口如
PageService.of(() -> userMapper.count(), (o,l) -> userMapper.list(o,l))
,语义清晰,无侵入性。

相关文章