Java MyBatis返回两个字段作为Map的key和value问题
Java MyBatis返回两个字段作为Map的key和value
使用 MyBatis 时,可能会遇到这种情况:
只查询两个字段,需要返回一个 Map,其中第一个字段作为 key,第二个字段作为 value。
这种查询在某些场景非常好用,比如查询字典,查询出的 key 和 value 就是字典的 value 和 label,利用 HashMap 的 get 方法时间复杂度为 O(1) 的特点,可以实现字典的快速映射。
此时的写法是有讲究的
直接返回 Map:
当数据量超过 1 时,会报错。因为此时将 Map 作为一个对象,一个对象不能存储多个内容。
加上 <font style="color:rgb(77, 77, 77);">@MapKey</font>
注解:
需要指定返回的哪个字段作为 key。虽然能生成 Map,但其中的 value 是一个对象,不是直接值,与预期不符。
要达到预期的返回值,需要使用 MyBatis 提供的 ResultHandler
结果处理器。
1.自定义一个 Map结果处理器
<font style="color:#080808;background-color:#ffffff;">MapResultHandler</font>
public class MapResultHandler<K,V> implements ResultHandler<Map<K,V>> { private final Map<K,V> mappedResults = new HashMap<>(); @Override public void handleResult(ResultContext context) { Map map = (Map) context.getResultObject(); mappedResults.put((K)map.get("key"), (V)map.get("value")); } public Map<K,V> getMappedResults() { return mappedResults; } }
2.编写 Mapper.java
void selectMap(MapResultHandler<String, String> mapResultHandler);
如果要传参,在前面指定即可,比如:
void selectMap(@Param("type") String type, MapResultHandler<String, String> mapResultHandler);
3.编写 Mapper.xml
<resultMap id="mapResult" type="java.util.HashMap"> <result property="key" column="value"/> <result property="value" column="label"/> </resultMap> <select id="selectMap" resultMap="mapResult"> SELECT t1.`value`, t1.`label` FROM sys_dict t1 WHERE t1.`type` = #{type} AND t1.`del_flag` = '0' </select>
4.调用
MapResultHandler<String, String> resultHandler = new MapResultHandler<>(); baseMapper.selectMapByLanguage(Global.getLanguage(), resultHandler); Map<String, String> map = resultHandler.getMappedResults();
这样得到的 Map 就是将两个字段作为 Map 的 key 和 value 了。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
详解Spring整合mybatis--Spring中的事务管理(xml形式)
这篇文章主要介绍了Spring整合mybatis--Spring中的事务管理(xml形式),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-11-11SpringBoot搭建Dubbo项目实现斐波那契第n项详解
这篇文章主要讲解了“SpringBoot+Dubbo怎么实现斐波那契第N项”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习吧2022-06-06springboot如何读取配置文件(application.yml)中的属性值
本篇文章主要介绍了springboot如何读取配置文件(application.yml)中的属性值,具有一定的参考价值,有兴趣的小伙伴可以了解一下2017-04-04
最新评论