当前位置: 首页 > 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.lryc.cn/news/602778.html

相关文章:

  • 若依【(前后端分离版)SpringBoot+Vue3】
  • JVM 笔记:类加载、内存管理、垃圾收集与垃圾收集器
  • JVM 垃圾回收机制全景解析:从对象回收到收集算法
  • C++---初始化列表(initializer_list)
  • Flutter在购物场景中BLoC的应用
  • shell每日三题大神之路:第三天
  • 轻量级远程开发利器:Code Server与cpolar协同实现安全云端编码
  • AR眼镜:工业4.0时代高风险作业的安全守护者
  • 深度思考和搜索研究 最新的GSPO强化学习算法
  • 解决 xshell 无法连接win10 、win11的linux子系统
  • python每日一题练习
  • Java集合遍历的几种方式
  • 【docker】DM8达梦数据库的docker-compose以及一些启动踩坑
  • Thymeleaf th:object核心用法精解
  • LeetCode|Day28|67. 二进制求和|Python刷题笔记
  • OpenLayers 入门指南【四】:项目初始化
  • org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path
  • 下载k8s官方组件chart和容器镜像
  • 自动化测试常用函数
  • 网络编程概述与UDP编程
  • 关于前端的性能优化
  • 【数据架构09】人工智能及数据智能架构篇
  • pg数据库,本地服务器下不同端口迁移
  • 用了Flutter包体积增大就弃用Flutter吗?包体积与开发效率,这两者之间如何权衡?
  • 微信小程序点击输入框时,顶部导航栏被遮挡问题如何解决?
  • 鸿蒙打包签名
  • Linux驱动23 --- RkMedia 使用
  • gdb 基本命令
  • 3DGRUT: 革命性的3D高斯粒子光线追踪与混合光栅化技术深度解析
  • Error: Unable to find a match: python3.8