使用MyBatis将数据库的两列映射成Map
2021/11/8 2:13:15
本文主要是介绍使用MyBatis将数据库的两列映射成Map,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 需求描述
平时主要负责聚合公司各组的数据到ES,经常会遇到从不同的表取出两列简单的映射关系的需求(就像是只需要学生表的学号和姓名),开始根据其他人流传下来的代码风格,查询返回一个List,然后自己写代码遍历映射成Map,大量重复的无效率的工作实在是不堪其扰,抽空找了找资料发现可以通过Mybatis支持自定义 ResultHandler 来处理,总算是看着代码舒服多了。
2. 解决方案
2.1 Mbatis 映射
首先将 Mybatis 的 Sql 配置返回值类型为 Map
<select id="***" resultType="java.util.Map" parameterType="*"> select column_1, column_2 from table </select>
2.2 创建ResultHandler
为了通用性,使用泛型指定返回的映射字段类型
import org.apache.ibatis.session.ResultContext; import org.apache.ibatis.session.ResultHandler; import java.util.HashMap; import java.util.Map; /** * 处理简单的两个基本属性之间的映射关系 * @author * @version 1.0 * @date */ public class TwoColumnsMapResultHandler<K, V> implements ResultHandler<Map<String, Object>> { private final Map<K, V> resultMap = new HashMap<>(); private final String keyColumn; private final String valueColumn; public TwoColumnsMapResultHandler(String keyColumn, String valueColumn) { this.keyColumn = keyColumn; this.valueColumn = valueColumn; } @Override @SuppressWarnings("unchecked") public void handleResult(ResultContext<? extends Map<String, Object>> resultContext) { Map<String, Object> result = resultContext.getResultObject(); if (result.get(keyColumn) != null) { resultMap.put((K) result.get(keyColumn), (V) result.get(valueColumn)); } } public Map<K, V> getResults() { return resultMap; } }
2.3 使用自定义的ResultHandler
public Map<String, String> selectExample(SqlSession session, SqlQueryParam param) throws SqlQueryException { TwoColumnsMapResultHandler<String, String> handler = new TwoColumnsMapResultHandler<>("column_1", "column_2"); try { session.select("***", param, handler); return handler.getResults(); } catch (Exception e) { throw new SqlQueryException(e); } }
这篇关于使用MyBatis将数据库的两列映射成Map的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27数据结构与算法面试题详解及练习
- 2024-12-27网络请求面试题详解与实战
- 2024-12-27数据结构和算法面试真题详解与实战教程
- 2024-12-27网络请求面试真题解析与实战教程
- 2024-12-27数据结构和算法大厂面试真题详解与实战指南
- 2024-12-27TS大厂面试真题解析与应对策略
- 2024-12-27TS大厂面试真题详解与解析
- 2024-12-27网站安全入门:如何识别和修复漏洞
- 2024-12-27SQL注入基础教程
- 2024-12-27初学者指南:理解和修复跨域漏洞