select支持多查询,获取分页count

2023-05-16

在我们使用mybatis 时,当我们根据分页去查询数据集时,需要传入的参数有page(页码)和size(每页的条数),而我们期望获取到的数据有,小于或等于size的list数据集,同时我们还需要得到一个count,总共的数据条数。 

官方提供了一个select sql_calc_found_rows 字段 from 表 ... ; 然后再调用select found_rows(); 获取总记录数。 那么如何在mybatis中同时执行两个sql获取结果集? 

解决方法:
(1)连接数据库的时候,指定可支持多查询“allowMultiQueries=true”,如配置文件中 jdbc.url=jdbc:mysql://localhost:3306/wash?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
(2)mybatis的xml文件中查询语句添加一个结果集,并且用逗号隔开。 resultMap="BaseResultMap, countAdminResultMap"。同时select 之后添加一个关键字 sql_calc_found_rows (必须)。


 <resultMap type="Integer" id="countAdminResultMap">
    <result column="count" jdbcType="INTEGER" javaType="Integer" />
  </resultMap>
  <select id="listdata" resultMap="BaseResultMap, countAdminResultMap" parameterType="java.util.Map">
    select sql_calc_found_rows id, username, mobile, password, type
    from sys_admin where 1 = 1 
    <include refid="Base_If_Condition" /> 
         limit #{pageSizeBegin, jdbcType=INTEGER} , #{pageSize, jdbcType=INTEGER};
    SELECT found_rows() as count;
  </select>  

(3)mapper文件方法名


List<?> listdata(Map<String, Object> paramMap);  

(4)service方法

这里仅查看serviceImpl方法即可。 这里返回的List<?> 包含两个数据,一个是数据list,另一个是count。接收它们放入我们的Page对象即可。


public Page<Map<String, Object>> listdata(Map<String, Object> paramMap) {
        List<?> list = adminMapper.listdata(paramMap);
        List<Map<String, Object> > listMaps = new ArrayList<>();   
        listMaps = (List<Map<String, Object> >) list.get(0);    //数据list
        int count = ((List<Integer>)list.get(1)).get(0);  //总记录数
        Page<Map<String, Object> > page = new Page<Map<String, Object> >();
        page.setData(listMaps);
        page.setCount(count);
        return page;
    }  

 

总结:通过这种方法,我们可以方便的获取到count,而不需要两次连接数据库,执行一次不必要的查询。 而以上这种方式主要利用的缓存,第二次查询直接从缓存中查出数据,花费时间可忽略不计。

本文转载自 https://blog.csdn.net/qq_31122833/article/details/83894992 ,用自己的话整理了一遍。方便以后回顾使用。

 

转载于:https://www.cnblogs.com/greys/p/MultiQueries.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

select支持多查询,获取分页count 的相关文章

  • MySQL - 按 count() 和 GROUP BY 排名

    我有我的 mysql 表posts 我的论坛的所有帖子都存储在其中 就像这样 id uid thread post title text time int int varchar int varchar text int 现在我想显示用户个
  • 如何在选择查询中创建新列

    在 MS Access 中 我想将新列插入到选择查询的返回结果中 新列的每一行都具有相同的值 例如 我的选择返回列 A B 我希望 C 成为选择查询创建的新列 A B C a1 b1 c a2 b2 c a3 b3 c select A B
  • jQuery - 选择选择框中的选项[重复]

    这个问题在这里已经有答案了 可能的重复 jQuery 以编程方式选择选择框中的选项 https stackoverflow com questions 1573930 jquery programmatically select an op
  • 如何在表上选择并计算某些值的出现次数

    我请求你的帮助 因为我不太了解 SQL 我需要计算表列中某些值的出现次数 以达到类似统计表的效果 如下图所示 需要的结果 Comment 我的结果表需要有前两列 国家和站点 来自第一个表 Violations 接下来的 5 列将包含状态表中
  • NSMutableArray 不添加对象[重复]

    这个问题在这里已经有答案了 我认为 我犯了一个非常基本的错误 但我正在使用NSMutableArray这不知何故并没有添加对象 我正在按其方式发送它 我有一个属性 并合成 property nonatomic strong NSMutabl
  • SQL:计数和子查询

    再次使用 count 和 sql 在 sqlite 上 我有表格 论文 paper id doi 年份 作者 paper id author id inst id 作者 作者 ID 姓名 名字 安装 inst id 名称 see id in
  • 轨道:fields_for选择

    在我的视图中 我使用 fields for 来显示关系表的表单数据 然而 此表格的一部分将有可供选择的选择列表 我看到 form for 和 fields for 帮助程序有 label text field text area 帮助程序
  • 如何进行快速但不准确的 InnoDB 行计数?

    PHPMyAdmin常见问题解答有话要说 http www phpmyadmin net documentation faq3 11关于 InnoDB 的大概行数 phpMyAdmin 使用快速方法来获取行数 并且此方法仅在 InnoDB
  • MySQL Select 查询 - 仅获取值的前 10 个字符

    好的 这就是问题所在 我有一个包含一些列的表 主题 是其中一列 无论 主题 字段包含一个包含 100 个字母的字符串 我都需要从 主题 字段获取前 10 个字母 例如 Table tbl 列 id subject value SQL查询 S
  • C 中的字符计数

    我正在尝试编写一个程序来计算字符串中的所有字符 我本来有它 但后来意识到我无法计算空格 我不明白为什么这不起作用 for m 0 z m 0 m if z m charcount 任何帮助表示赞赏 编辑 如果像这样扫描输入 字符串 会有什么
  • 如何使用jq通配符

    我有以下 json details car bmw addresses ext 118 21 8 0 29 version 4 addr 89 Psr version 6 addr 56 apT The key ext 118 21 8 0
  • MySQL:选择 DISTINCT / UNIQUE,但返回所有列?

    SELECT DISTINCT field1 field2 field3 FROM table 我正在尝试完成以下 SQL 语句 但我希望它返回所有列 这可能吗 像这样的东西 SELECT DISTINCT field1 FROM tabl
  • 更改 AS3 中的 TextField 选择颜色

    如何更改 ActionScript 3 中 TextField 的选择 突出显示 颜色 我有一个输入文本字段 黑色背景上有白色文本 因此 选择是不可见的 这对于可用性来说非常糟糕 谢谢 另一种方法是使用文本布局框架 特别是使用 Select
  • 如何使用 xslt 选择节点的祖父母

    我所处的情况是 我只能测试子节点 但我必须将标签应用于该子节点的祖节点 我尝试过使用
  • Contenteditable - 从插入符号提取文本到元素末尾

    浏览完所有可能的问题和答案后 我会尝试这种方式 我正在编写 RTE 程序 但未能成功提取 contenteditable 元素中的文本 原因是 每个浏览器处理节点和按键 13 事件的方式略有不同 例如 一个浏览器创建 br 另一个浏览器创建
  • 在 JavaFX 中搜索 TableView 列表

    如何在 TableWie 中查找记录 例如通过 ID 并选择创建的行并将其放在 Java 8 JavaFX 中的屏幕中间 您可以使用以下方式搜索元素 int searchId table getItems stream filter ite
  • 计算包含字母/数字的行数

    我想要实现的目标很简单 但是解释起来有点困难 我不知道在 postgres 中这是否真的可能 我处于相当基础的水平 SELECT FROM WHERE LEFT JOIN ON HAVING 等等基本的东西 我正在尝试计算包含特定字母 数字
  • 选择前 n 个字符相等的行(MySQL)

    我有一张带有玩家句柄的桌子 如下所示 1 N Laka 2 N James 3 nor Brian 4 nor John 5 Player 2 6 Spectator 7 N Joe 从那里我想选择第一个 n 字符匹配的所有玩家 但我不知道
  • SQL Server - 将行连接到逗号分隔的列表中

    假设我有一个临时表 如下所示 Id Value 1 1 1 2 1 3 2 1 2 2 我希望我的桌子是这样的 Id ValueList 1 1 2 3 2 1 2 所以基本上我需要将我的值分组为逗号分隔的列表 我已经尝试过以下操作 SEL
  • codeigniter,获取mysql表列中的最大值

    我正在使用 codeigniter 2 我有一个 mysql 表列 存储每个学生所用的时间 例如 1 2327 0 6547 1 9876 我想获得最大值 值该列 这是我的代码 this gt db gt select max time t

随机推荐

  • ubuntu 双击打不开软件或者创建的快捷方式

    问题 xff1a 一般在ubuntu系统下经常出现本来可以使用的软件现在双击没反应 xff0c 例如firefox浏览器 xff0c 其实这只是权限问题 xff0c 我们开始运行软件使用sudo导致创建了普通用户无法访问的文件 xff0c
  • 从键盘上输入一个2*3的矩阵,将其转置后形成3*2的矩阵输出

  • BugFix-libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory

    本人所用的系统如下 xff1a 其中如果没有 lsb release命令 xff0c 安装如下 xff1a apt get install y lsb release 如果出现bug xff1a 试下这个命令 xff1a sudo cp u
  • 谷歌浏览器怎么下载视频 Google Chrome下载视频方法

    核心提示 xff1a 现在我来教大家谷歌浏览器怎么下载视频 Google Chrome下载视频方法 谷歌浏览器怎么下载视频 Google Chrome下载视频方法 我们经常会在线看一些网页视频 xff0c 但是网站的视频下载都只支持自己的客
  • 解决MySQL数据库的中文乱码问题

    MySQL 4 1的字符集支持 Character Set Support 有两个方面 xff1a 字符集 Character set 和排序方式 Collation 对于字符集的支持细化到四个层次 服务器 server xff0c 数据库
  • Origin Pro 8.5设置文本框居中显示

    Q xff1a 在图形内新增了Text Object xff08 文本框 xff09 xff0c 如何使其居中 xff1f A xff1a 可执行如下操作 xff1a 单击文本框 xff0c 右键Programming Control在对话
  • 电脑重装系统后c盘数据能恢复吗?

    重装系统是指对电脑的操作系统例如Windows重新安装 系统重装可以解决各种系统问题 xff0c 例如电脑感染病毒 系统文件受损 系统变慢 崩溃无法启动 蓝屏等 正常的重装系统操作是将原来的系统分区 xff08 通常是C盘 xff09 格式
  • 如何恢复误删的C盘文件?必看技巧不可错过!

    C盘是电脑的系统盘 xff0c 如果被装满了 xff0c 电脑就会卡顿 很多人为了图方便 xff0c 将文件保存在桌面 xff0c 也就是储存在C盘里 xff0c 导致文件占据越来越多内存 xff0c 需要我们及时清理 xff0c 但在清理
  • arch安装应用命令

    arch安装应用命令 安装或者升级单个软件包 xff0c 或者一列软件包 xff08 包含依赖包 xff09 xff0c 使用如下命令 xff1a span class token macro property span class tok
  • 结束也是开始

    到昨天为止 精通ORACLE 10G 备份与恢复 算是告一段落了 xff0c 接下来准备学习一下性能调优方面的 xff0c 然后再回过来复习一下 精通ORACLE 10G 备份与恢复
  • C#将图像存成视频

    http www codeproject com Articles 7388 A Simple C Wrapper for the AviFile Library 文章摘至上面这个网页 xff0c 进行了一点点的翻译 Introductio
  • 购物车提交订单后与购物车进行交互

    在做项目的过程中 xff0c 感觉到了支付测验的必要性 xff0c 首先得获取订单的参数 xff0c 例如订单编号 xff0c 订单主的地址 xff0c 手机号码 xff0c 姓名 以下是支付代码 xff1a 在于 public Strin
  • Quartz的一般配置方法

    典型的一个调度框架 xff0c 给他一个条件 xff0c 到了这个条件 xff0c 他就自己按照条件去执行了 xff0c 以满足达到木写工作的需求 Quartz有三要素 xff1b Scheduler xff1a 调度器 所有的调度都是由它
  • MyBatis中关于session以及cache的管理

    Mybatis中缓存分为一级缓存与二级缓存 一级缓存指的只是缓存级别的一个命名 xff0c 主要就是每个sqlsession里都有一个HashMap来存储数据 xff0c 当然不同对象每个缓存区域也不一样 xff0c 所以一级缓存是不相互影
  • 分布式面试之Solr以及redis的面试问题

    redis之雪崩问题的解决 xff1a 首先redis做缓存 xff0c 应用场景一般如下 xff1a Redis做缓存是最常见的应用场景 客户端请求在缓存层命中就直接返回 xff0c 如果miss就去读取存储层 xff0c 存储层读取到就
  • 线程池详解

    在前面的文章中 xff0c 我们使用线程的时候就去创建一个线程 xff0c 这样实现起来非常简便 xff0c 但是就会有一个问题 xff1a 如果并发的线程数量很多 xff0c 并且每个线程都是执行一个时间很短的任务就结束了 xff0c 这
  • 日历组件

    lt DOCTYPE html gt lt html ng app 61 34 app 34 lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt title
  • 阻塞队列)详解

    一 前言 在新增的Concurrent包中 xff0c BlockingQueue很好的解决了多线程中 xff0c 如何高效安全 传输 数据的问题 通过这些高效并且线程安全的队列类 xff0c 为我们快速搭建高质量的多线程程序带来极大的便利
  • CSDN,你在忽悠谁?——社区用户数量大曝光

    根据 http hi csdn net 提供的好友搜索功能 xff0c 按地区搜索结果得出 xff0c csdn 社区用户数量是国内 66964 xff0c 国外用户总数不超过 1 千 详细清单请点击 根据 csdn 官方提供的数据 htt
  • select支持多查询,获取分页count

    在我们使用mybatis 时 xff0c 当我们根据分页去查询数据集时 xff0c 需要传入的参数有page 页码 和size 每页的条数 xff0c 而我们期望获取到的数据有 xff0c 小于或等于size的list数据集 xff0c 同