如何在Oracle ADF 12.2.1.4.0中对大数据集应用分页?
在Oracle ADF 12.2.1.4.0中为大数据集配置分页功能
一、ViewObject核心配置
直接编辑目标ViewObject,在Tuning标签页完成以下设置:
- 勾选Enable Pagination,开启ADF内置分页支持
- 设置Fetch Size:指定每次从数据库批量拉取的行数,建议和前端每页展示行数保持一致(如20、50),减少数据库交互次数
- 设置Max Fetch Size:可选,限制VO最多拉取的总行数,默认-1表示无限制;针对超大数据集,设置合理值避免内存溢出
- 注意:如果是基于自定义SQL的VO,不要手动添加
ROWNUM或OFFSET分页逻辑,ADF会自动根据配置生成对应的分页SQL
二、前端页面配合(ADF Faces)
如果用af:table展示数据,只需简单配置即可启用UI分页:
- 在
af:table标签中设置paginator="true",自动渲染分页控件 - 配置
rows属性为每页显示的行数,需和VO的Fetch Size匹配 - 可选配置:
paginatorPosition(控制分页控件显示位置,如top/bottom/both)、paginatorRange(设置分页控件显示的页码数量)
三、自定义分页逻辑(代码层面)
如果需要在业务层手动控制分页,可在Application Module实现类或客户端代码中调用VO的API:
// 获取目标VO实例 YourViewObjectImpl targetVo = getYourViewObject(); // 设置每次拉取行数 targetVo.setFetchSize(20); // 设置最大拉取行数(可选) targetVo.setMaxFetchSize(1000); // 执行查询 targetVo.executeQuery(); // 跳转到指定行(需确保该行已被拉取,未拉取可调用fetchMoreRows()提前加载) targetVo.scrollToRow(40);
四、注意事项
- 确保VO对应的数据库查询有合适的索引,避免分页时数据库执行全表扫描,影响性能
- 复杂查询(如多表关联、子查询)需验证ADF生成的分页SQL正确性,可通过ADT的SQL Log查看生成语句
- 若数据量极大,
getEstimatedRowCount()获取总记录数可能性能低下,可在VO的Tuning标签页关闭Estimate Row Count,或自定义实现总行数查询逻辑
内容的提问来源于stack exchange,提问作者Tung Vo
相关产品推荐
相关产品推荐

