当前位置: 首页 > news >正文

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

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,请求测试可以看到分页成功。


http://www.dtcms.com/a/302846.html

相关文章:

  • 阿里云Ubuntu 22.04 ssh隔一段时间自动断开的解决方法
  • 【力扣热题100】哈希——两数之和
  • 【mysql】—— mysql中的timestamp 和 datetime(6) 有什么区别,为什么有的地方不建议使用timestamp
  • 智能制造,从工厂建模,工艺建模,柔性制造,精益制造,生产管控,库存,质量等多方面讲述智能制造的落地方案。
  • 破解PCB制造痛点,盘古信息IMS MOM 铸就数字化标杆工厂
  • PL/SQL
  • 开疆智能ModbusRTU转Profinet网关连接西门子CP341配置案例
  • DDD之整体设计流程(2)
  • debian系统分卷是不会影响系统启动速度?
  • 排序算法 (Sorting Algorithms)-Python示例
  • Android 系统架构
  • 阿里云 API 网关 x OKG:游戏连接治理的「最后一公里」
  • 阿里云正式开源 LoongSuite:打造 AI 时代的高性能低成本可观测采集套件
  • 电脑不小心误删了文件怎么恢复??
  • AI资讯日报 - 2025年07月28日
  • EXCEL批量生成超链接引用无效的情况
  • Kotlin中Flow
  • 基于Spring Boot的装饰工程管理系统(源码+论文)
  • 一个典型的微控制器MCU包含哪些模块?
  • kafka开启Kerberos使用方式
  • “本地计算机上的 mysql 服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止”解决方式
  • 算法训练营day34 动态规划② 62.不同路径、63. 不同路径 II、343整数拆分、96.不同的二叉搜索树
  • Kafka 顺序消费实现与优化策略
  • linux diff命令使用教程
  • 最长连续数组
  • 【C++11】列表初始化【{ }使用详解】
  • Facenet(MTCNN+InceptionResnetV1)人脸考勤项目(有缺点,但可用)
  • 境外期货Level2高频Tick历史行情数据获取与应用指南
  • 基于LangGraph Cli的智能数据分析助手
  • MCU 中的 PWM(脉冲宽度调制)是什么?