DBAPI 实现分页查询的两种方法

发布于:2025-07-29 ⋅ 阅读:(10) ⋅ 点赞:(0)

DBAPI 实现分页查询的两种方法

背景

在进行分页查询时,用户通常需要传入当前页码 pageNo 和每页显示的条数 pageSize 参数。根据这两个参数,我们可以从数据库中查询出当前页的数据。以 MySQL 为例,分页查询的 SQL 语句如下:

select * from t_user limit 30, 10

这里的 limit 30, 10 表示从第 31 条记录开始,查询 10 条记录。

参数动态计算

在 DBAPI 中,参数注入 SQL 的写法如下:

select * from t_user limit #{offset}, #{pageSize}

而这里的 offset 参数每次都要根据 pageNopageSize 动态计算,具体公式为 offset = (pageNo - 1) * pageSize

为了解决这个动态计算的需求,DBAPI 提供了两种实现方案:第一种是使用参数处理插件,第二种是使用动态 SQL 中的 bind 标签。

方案 1 - 参数处理插件

  1. 访问插件市场,下载分页插件,上传到 DBAPI 的 extlib 目录或者 lib 目录下,重启 DBAPI 服务。

  1. 创建 API,添加参数 pageNopageSize

    API 必须至少包含这两个参数,且必须是bigint类型,pageNo 表示当前第几页,pageSize 表示每页显示的条数。

  1. SQL 编写

    SQL 中使用参数 offsetpageSizeoffset 表示查询记录的开始位置,pageSize 表示每页显示的条数。

    select * from student limit #{offset}, #{pageSize}
    

  1. 全局插件-参数处理 中选择 分页插件

    插件参数不用填写,为非必填项。

    使用此插件,系统会自动生成一个新的参数 offset,值为 (pageNo - 1) * pageSize

  2. 测试

    保存 API,请求测试可以看到分页成功。


注意此插件在个人版 4.0.16 及以上、企业版 4.1.10 及以上版本支持。

方案 2 - 动态 SQL 中的 bind 标签

  1. 创建 API,添加参数 pageNopageSize

    API 必须至少包含这两个参数,且必须是bigint类型,pageNo 表示当前第几页,pageSize 表示每页显示的条数。

  1. SQL 编写

    SQL 中使用参数 offsetpageSizeoffset 表示查询记录的开始位置,pageSize 表示每页显示的条数。

    DBAPI 支持类似 mybatis 的动态 SQL 标签语法, offset使用 <bind> 标签创建出来。

    <bind name="offset" value="(pageNo - 1) * pageSize" />
    select * from student limit #{offset}, #{pageSize}
    

  1. 测试

    保存 API,请求测试可以看到分页成功。



网站公告

今日签到

点亮在社区的每一天
去签到