IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> mybatis group by 分组查询:将返回结果封装为map -> 正文阅读

[开发工具]mybatis group by 分组查询:将返回结果封装为map

1. 最简单但性能最差的做法

在逻辑层分多次对数据库进行查询。伪代码如下。

List<String> nameList ;
List<Integer> countList;
for(String name: nameList){
countList.add(xxDao.countByName(name));
}

map文件如下。

<select>
	select cout(*) from ** where name=#{name};
</select>

这样写起来很简单,但是反复建立与数据库的连接,效率极差。

2. 使用group by分组查询,将查询结果封装成类

为了提高性能,使用数据库中 group by 的语法,直接进行分组查询,并定义一个类接受查询结果。

//结果类
public class result{
private String key;
private String value;
//省略getter和setter
}

map文件如下。

<resultMap type="com.**.result" id="result"></resultMap>
<select resuleMap="result">
select name as key , count(*) as value group by name;
</select>

然后再对List进行处理,这样效率比第一种方法高,但是建立result对象会有一定内存消耗,对类进行处理也并不方便。

3.group by分组查询,将结果封装为map。

直接封装为map?

    <select id="getDepNumMap" resultType="java.util.HashMap">
        select department_id , count(*) 
        from staff_career_info
        where status = 'enable'
        group by department_id;
    </select>

想用上面这样的代码直接将查询结果封装到map中是不可以的。返回结果如下:在这里插入图片描述可见,这样得到的map中将column的名字作为了key,结果作为value。而且,如果有多个分组也只会返回一个分组。

List<HashMap<String,Object>>

正确的做法如下。

//Dao
List<HashMap<String,Object>> getDepNumMap();
//map文件
    <select id="getDepNumMap" resultType="java.util.HashMap">
        select department_id as 'key', count(*) as 'value'
        from staff_career_info
        where status = 'enable'
        group by department_id;
    </select>

然后再将得到的list 转化为map。这里的方法要自己写。

//转换方法
List<HashMap<String, Object>> list = sysStaffCareerInfoDao.getDepNumMap();
Map<String, Integer> map = new HashMap<>();
if (list != null && !list.isEmpty()) {
	for (HashMap<String, Object> hashMap : list) {
    	String key = null;
        Integer value = null;
        for (Map.Entry<String, Object> entry : hashMap.entrySet()) {
 	       if ("key".equals(entry.getKey())) {
 	       		key = (String) entry.getValue();
           } else if ("value".equals(entry.getKey())) {
           		//我需要的是int型所以做了如下转换,实际上返回的object应为Long。
                value = ((Long)entry.getValue()).intValue();
           }     
        }
        map.put(key, value);
    }
}
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 11:12:24  更:2022-05-06 11:12:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 3:40:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码