在我们使用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 ,用自己的话整理了一遍。方便以后回顾使用。

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

  1. MVC+Bootstrap+Drapper使用PagedList.Mvc支持多查询条件分页

    前几天做一个小小小项目,使用了MVC+Bootstrap,以前做分页都是异步加载Mvc部分视图的方式,因为这个是小项目,就随便一点.一般的列表页面,少不了有查询条件,下面分享下Drapper+Page ...

  2. 让Asp.net mvc WebAPI 支持OData协议进行分页查询操作

    这是我在用Asp.net mvc WebAPI 支持 OData协议 做分页查询服务时的 个人拙笔. 代码已经开发到oschina上.有兴趣的朋友可以看看,欢迎大家指出不足之处. 看过了园子里的几篇关 ...

  3. ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  4. 《C#本质论》读书笔记(14)支持标准查询操作符的集合接口

      14.2.集合初始化器 使用集合初始化器,程序员可以采用和数组相似的方式,在集合的实例化期间用一套初始的成员来构造这个集合. 如果没有集合初始化器,就只有在集合实例化后才能显示添加到集合中--例如 ...

  5. webform组合查询和分页

    1.组合查询(1)数据访问类 //参数1:SQL语句 参数2:哈希表public List<Users> chas(string s,Hashtable has) { List<Us ...

  6. 利用DetachedCriteria实现模糊查询和分页

      分类: Java-Developing  前段时间在做模糊查询,并利用数据库分页,DAO用hibernate实现,刚开始的时候 根据业务层的数据,拼hql语句进行查询,且不说要进行一些if判断,单 ...

  7. 支持DISTINCT的通用分页存储过程(SQL2005)

    /****** 对象: StoredProcedure [dbo].[P_CommonPagination] 脚本日期: 07/22/2009 10:22:01 ******/ SET ANSI_NU ...

  8. 十四、C# 支持标准查询运算符的集合接口

    支持标准查询运算符的集合接口. System.Linq.Enumeralbe类提供的一些常用的API 来执行集合处理 1.匿名类型 2.隐匿类型的局部变量 3.集合初始化器 4.集合 5.标准查询运算 ...

  9. LINQ 小项目【组合查询、分页】

    使用 linq 在网页上对用户信息增删改,组合查询,分页显示 using System; using System.Collections.Generic; using System.Linq; us ...

随机推荐

  1. Mysql数据库自动定时备份软件推荐--MySqlBackupFTP(免费,亲测可用,附使用图示)

    MySqlBackupFTP是一款Mysql数据库自动定时备份软件,免费版本就基本上可以满足我们的需求,不需要什么破解版,可直接官网下载安装使用. 先看结果(日志): 软件界面: 可以设定计划任务,每 ...

  2. Kubernetes -- Server 部署

    1.  Node 节点配置文件 1.1 下载相关的软件 wget https://dl.k8s.io/v1.13.1/kubernetes-server-linux-amd64.tar.gz wget ...

  3. java集合类学习笔记之LinkList

    1.简述 LinkList的底层其实就是一个双向链表,所谓的链表就是一个LinkList内部静态静态类(Node),对LinkList的所有操作本质上就是通过对LinkList中新建的Node对象 进 ...

  4. 关于zabbix _get返回Could not attach to pid的问题

    分析:这是因为由于zabbix客户端没有权限,导致zabbix_server端无法获取到键值数据!! 解决:在客户端上添加用户sudo的权限就可以解决了. 验证:是脚本的话还要在脚本里加上sudo的命 ...

  5. IntelliJ IDEA 把Maven项目导出可执行jar包

    2017年04月05日 14:05:08 waterimelon 阅读数:1574 标签: intellij ideamaven 更多 个人分类: idea   第一步  第二步  第三步 

  6. Qt 学习之路 2(29):绘制设备

    Qt 学习之路 2(29):绘制设备 豆子 2012年12月3日 Qt 学习之路 2 28条评论 绘图设备是继承QPainterDevice的类.QPaintDevice就是能够进行绘制的类,也就是说 ...

  7. CentOS 7 系统区域和键盘设置

    系统区域设置包括语言.键盘布局等,可以通过修改/etc/locale.conf配置文件或使用localectl实用程序来进行设置,一般在安装时设置为默认选择(英文.美式键盘)即可 修改配置文件 [ro ...

  8. quill 设置 初始值...

    1down voteaccepted For your first issue change this: text.value = JSON.stringify(quill.root.innerHTM ...

  9. HLS-搭建Nginx流媒体服务器

    Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒 ...

  10. clustalX2使用以及相关的问题

    Clustalx的操作 第一步:输入序列文件. 第二步:设定比对的一些参数. 参数设定窗口. 第三步:开始序列比对. 第四步:比对完成,选择保存结果文件的格式 相关问题 CLUSTALX-是CLUST ...