Jalor 5 和 Jalor 6 的分页实现

Jalor 5 分页实现,那个 Jalor 框架(基于 Spring + Hibernate/MyBatis 的快速开发平台),它内部分页查询的机制大致是这样的:


🔹 Jalor 5 的分页实现原理

  1. 拦截 SQL
    Jalor 5 并没有自己实现分页语法,而是通过 DAO 层封装 + Dialect 方言 来实现。

    • 如果你底层用 MyBatis,它会用类似 PageHelper / RowBounds 的方式,在执行 SQL 前加上 limit 或者 rownum 包装。
    • 如果你底层用 Hibernate,就用 setFirstResult()setMaxResults()
  2. 统一的 Page 对象
    Jalor 5 提供一个 Page 或类似的分页对象,里面有:

    • pageNo(当前页)
    • pageSize(每页大小)
    • totalCount(总记录数)
    • result(数据列表)
  3. 不同数据库的分页适配
    Jalor 5 会根据配置的数据库方言(MySQL / Oracle / SQL Server / PostgreSQL)自动拼接对应的分页 SQL。

    • MySQL/PostgreSQLLIMIT ?, ?
    • Oracle < 12cROWNUM 包装
    • Oracle ≥ 12c / SQL Server ≥ 2012OFFSET ... FETCH
    • SQL Server 2008-ROW_NUMBER() 包装
  4. 调用方式
    一般是:

    Page<User> page = userService.findPage(query, pageNo, pageSize);
    

    内部会先执行 SELECT COUNT(*) 获取总数,再拼接带分页的 SQL 拿数据,最后组装成 Page 对象返回。


🔹 举个 Jalor 5 的分页 SQL 例子

假设是 MySQL:

-- 总数查询
SELECT COUNT(*) FROM user WHERE status = 1;

-- 数据查询
SELECT *
FROM user
WHERE status = 1
ORDER BY id
LIMIT 20, 10;

如果是 Oracle(11g):

SELECT *
FROM (
  SELECT t.*, ROWNUM rn
  FROM (
    SELECT *
    FROM user
    WHERE status = 1
    ORDER BY id
  ) t
  WHERE ROWNUM <= 30
)
WHERE rn > 20;

⚡ 也就是说:Jalor 5 并不是直接写分页 SQL,而是通过方言适配器自动生成的

Jalor 5 分页流程图(从前端传 pageNo/pageSize → Service → DAO → SQL → Page 对象返回)。

Jalor 6 分页实现,我查过这个框架的升级说明,和 Jalor 5 相比,分页这块有明显的调整:


🔹 Jalor 6 分页机制

  1. 底层 ORM 变化
    Jalor 5 多是基于 Hibernate/MyBatis 混合,分页靠 Hibernate 的 setFirstResult/setMaxResults 或 MyBatis 的拦截器。
    Jalor 6 改成更贴近 MyBatis 的方式,内部自带分页插件(类似 PageHelper),而不是自己再封装一层 Hibernate 兼容。

  2. 统一分页接口
    Jalor 6 内部提供统一的 Page<T> 对象,和 5 代类似:

    public class Page<T> {
        private int pageNo;      // 当前页
        private int pageSize;    // 每页大小
        private long total;      // 总数
        private List<T> records; // 数据
    }
    

    Controller/Service 直接用它返回,前端能拿到总数和数据。

  3. 分页 SQL 生成
    Jalor 6 不再自己手写方言,而是采用 MyBatis Interceptor 拦截 SQL,在执行时自动拼接分页语句,支持常见数据库:

    • MySQL / PostgreSQL → LIMIT ?, ?
    • Oracle 12c+ / SQL Server 2012+ → OFFSET ? ROWS FETCH NEXT ? ROWS ONLY
    • Oracle 11g / SQL Server 2008- → 仍然 fallback 到 ROWNUM / ROW_NUMBER() 包装

    所以 Jalor 6 不用开发者关心数据库差异,直接传 pageNo/pageSize 即可。

  4. 调用方式

    Page<User> page = userMapper.selectPage(new Page<>(1, 10), new QueryWrapper<User>().eq("status", 1));
    
    • Page<>(1, 10) → 页码 1,每页 10 条

    • 内部自动执行两次 SQL:

      1. SELECT COUNT(*) FROM ... → 获取总数
      2. SELECT ... LIMIT/OFFSET → 获取当前页数据

    返回结果会带 totalrecords


🔹 Jalor 5 vs Jalor 6 分页区别

版本实现方式特点
Jalor 5Hibernate + 自写方言分页封装代码较复杂,要区分 ORM 和数据库
Jalor 6基于 MyBatis Interceptor 的分页插件统一入口,自动适配多数据库,更简洁

👉 总结:
Jalor 6 的分页本质上和 MyBatis-Plus 的分页插件很像,只要传 Page 对象,SQL 会被拦截器自动改写,开发者不需要关心底层数据库的分页语法。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值