select支持多查询,获取分页count
在我们使用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的更多相关文章
- MVC+Bootstrap+Drapper使用PagedList.Mvc支持多查询条件分页
前几天做一个小小小项目,使用了MVC+Bootstrap,以前做分页都是异步加载Mvc部分视图的方式,因为这个是小项目,就随便一点.一般的列表页面,少不了有查询条件,下面分享下Drapper+Page ...
- 让Asp.net mvc WebAPI 支持OData协议进行分页查询操作
这是我在用Asp.net mvc WebAPI 支持 OData协议 做分页查询服务时的 个人拙笔. 代码已经开发到oschina上.有兴趣的朋友可以看看,欢迎大家指出不足之处. 看过了园子里的几篇关 ...
- ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- 《C#本质论》读书笔记(14)支持标准查询操作符的集合接口
14.2.集合初始化器 使用集合初始化器,程序员可以采用和数组相似的方式,在集合的实例化期间用一套初始的成员来构造这个集合. 如果没有集合初始化器,就只有在集合实例化后才能显示添加到集合中--例如 ...
- webform组合查询和分页
1.组合查询(1)数据访问类 //参数1:SQL语句 参数2:哈希表public List<Users> chas(string s,Hashtable has) { List<Us ...
- 利用DetachedCriteria实现模糊查询和分页
分类: Java-Developing 前段时间在做模糊查询,并利用数据库分页,DAO用hibernate实现,刚开始的时候 根据业务层的数据,拼hql语句进行查询,且不说要进行一些if判断,单 ...
- 支持DISTINCT的通用分页存储过程(SQL2005)
/****** 对象: StoredProcedure [dbo].[P_CommonPagination] 脚本日期: 07/22/2009 10:22:01 ******/ SET ANSI_NU ...
- 十四、C# 支持标准查询运算符的集合接口
支持标准查询运算符的集合接口. System.Linq.Enumeralbe类提供的一些常用的API 来执行集合处理 1.匿名类型 2.隐匿类型的局部变量 3.集合初始化器 4.集合 5.标准查询运算 ...
- LINQ 小项目【组合查询、分页】
使用 linq 在网页上对用户信息增删改,组合查询,分页显示 using System; using System.Collections.Generic; using System.Linq; us ...
随机推荐
- Mysql数据库自动定时备份软件推荐--MySqlBackupFTP(免费,亲测可用,附使用图示)
MySqlBackupFTP是一款Mysql数据库自动定时备份软件,免费版本就基本上可以满足我们的需求,不需要什么破解版,可直接官网下载安装使用. 先看结果(日志): 软件界面: 可以设定计划任务,每 ...
- Kubernetes -- Server 部署
1. Node 节点配置文件 1.1 下载相关的软件 wget https://dl.k8s.io/v1.13.1/kubernetes-server-linux-amd64.tar.gz wget ...
- java集合类学习笔记之LinkList
1.简述 LinkList的底层其实就是一个双向链表,所谓的链表就是一个LinkList内部静态静态类(Node),对LinkList的所有操作本质上就是通过对LinkList中新建的Node对象 进 ...
- 关于zabbix _get返回Could not attach to pid的问题
分析:这是因为由于zabbix客户端没有权限,导致zabbix_server端无法获取到键值数据!! 解决:在客户端上添加用户sudo的权限就可以解决了. 验证:是脚本的话还要在脚本里加上sudo的命 ...
- IntelliJ IDEA 把Maven项目导出可执行jar包
2017年04月05日 14:05:08 waterimelon 阅读数:1574 标签: intellij ideamaven 更多 个人分类: idea 第一步 第二步 第三步
- Qt 学习之路 2(29):绘制设备
Qt 学习之路 2(29):绘制设备 豆子 2012年12月3日 Qt 学习之路 2 28条评论 绘图设备是继承QPainterDevice的类.QPaintDevice就是能够进行绘制的类,也就是说 ...
- CentOS 7 系统区域和键盘设置
系统区域设置包括语言.键盘布局等,可以通过修改/etc/locale.conf配置文件或使用localectl实用程序来进行设置,一般在安装时设置为默认选择(英文.美式键盘)即可 修改配置文件 [ro ...
- quill 设置 初始值...
1down voteaccepted For your first issue change this: text.value = JSON.stringify(quill.root.innerHTM ...
- HLS-搭建Nginx流媒体服务器
Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒 ...
- clustalX2使用以及相关的问题
Clustalx的操作 第一步:输入序列文件. 第二步:设定比对的一些参数. 参数设定窗口. 第三步:开始序列比对. 第四步:比对完成,选择保存结果文件的格式 相关问题 CLUSTALX-是CLUST ...