# 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
参数每次都要根据pageNo
和pageSize
动态计算,offset=(pageNo-1)*pageSize
- 为了解决这个动态计算的需求,DBAPI 提供了
参数处理插件
,可以对请求参数进行用户自定义的处理,并且官方已经实现了分页插件,该插件已经上传到插件市场 (opens new window),用户下载使用即可。
下面具体来看插件如何使用
# 分页插件使用
- 访问插件市场 (opens new window),下载分页插件,上传到 DBAPI 的
extlib
目录或者lib
目录下,重启 DBAPI 服务
- 创建 API,添加参数
pageNo
pageSize
API 必须至少包含两个参数,pageNo
和pageSize
,pageNo
表示当前第几页,pageSize
表示每页显示的条数
- sql 编写
sql 中使用参数offset
和pageSize
,offset
表示查询记录的开始位置,pageSize
表示每页显示的条数
select * from t_city limit #{offset}, #{pageSize}
全局插件-参数处理
中选择分页插件
插件参数不用填写,非必填
- 测试
保存 API,请求测试可以看到分页成功。
# 注意
注意此插件在个人版4.0.16
及以上、企业版4.1.10
及以上版本支持