mybatis group by 分组查询:将返回结果封装为map
2023-09-14 09:14:50 时间
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);
}
}
相关文章
- Android基于DataBinding封装RecyclerView实现快速列表开发
- Map集合转换成实体类对象,实体类对象转换为map集合,互转工具类「建议收藏」
- java中map根据value找key_Java Map和Map<String, Object>类型,map通过value找key
- docker部署jenkins安装使用教程_docker封装python程序
- 有序的Map集合_map集合特点
- DO-218AB封装,SM8T系列,SM8S系列加强版,汽车级TVS二极管
- 自定义封装axios
- Vue CLI 2 脚手架 TabBar 组件封装
- Python 封装zabbix-get接口
- python中封装与解构
- 【C++修炼之路】21.红黑树封装map和set
- 批量采集淘宝商品详情数据接口,商品价格,商品销量,商品优惠券,商品视频数据接口封装代码教程
- java 使用java执行命令简易封装类详解编程语言
- 使用Redis存储Map结构数据(redis存储map)
- Redis精准读取Map数据的窍门(redis获取map)
- 极速操作:Redis实用工具类封装(redis工具类封装)
- MySQL中使用Map作为参数的实现方法(mysql中map做参数)
- 从Redis中取出Map一步搞定(从redis中取map)
- 警惕Redis Map的频繁变更(redis频繁修改map)
- 使用Oracle Map方法开启新视野(oracle map方法)
- 科学上网如何使用Oracle MAP(oracle map使用)
- Redis使用get查询Map(redis获取map命令)
- Redis存储Map一次全方位试验(redis能存map吗)
- JavaScript的模块化:封装(闭包),继承(原型)介绍