mapper.xml返回值放入map中
时间: 2025-04-18 07:23:13 浏览: 46
### 配置 MyBatis Mapper.XML 将查询结果作为 Map 返回
在 MyBatis 中,可以通过设置 `resultType="java.util.Map"` 来让查询的结果自动封装成 Java 的 HashMap 对象。这种方式适用于不需要复杂映射关系的场景。
对于简单的键值对形式的数据存储到 map 中可以如下操作:
#### 使用 resultType 属性指定返回类型为 java.util.Map
```xml
<select id="getUsersAsMap" parameterType="int" resultType="java.util.Map">
SELECT user_id AS KEY, username AS VALUE FROM users WHERE department_id = #{departmentId}
</select>
```
上述 SQL 会将每一行记录转换成一个 entry 存储于最终返回的一个大 Map 中,其中 key 和 value 是由 select 后面定义的列名决定[^1]。
如果希望整个查询结果作为一个整体被放入单个 Map,则应考虑使用 resultMap 定义字段与对象属性之间的关联规则,并通过 `<collection>` 或者其他方式来构建更复杂的结构。不过这通常用于列表类型的集合而非单一的 Map 实例。
当涉及到较为复杂的嵌套对象如 person 类及其内部含有的 card 成员变量时,推荐采用 resultMap 方式来进行精确控制[^3]。
为了使查询结果能够按照预期的方式存入 Map,在编写 Select 语句的时候需要注意两点:
- 映射文件中声明的 sql 可以直接利用 as 关键字给列起别名以便更好地匹配目标实体类中的属性名称或者是 Map 键的名字。
- 如果是多条记录转成多个 Entry 放在一个总的 Map 里边的话,那么一般情况下我们会选取某唯一标识符作为 Key 而把其余所有信息打包成 Value (即另一个子 Map),这样做的好处是可以方便地获取特定用户的全部资料而不会造成混淆。
下面是一个具体的例子展示如何实现这一点:
```xml
<!-- 获取用户信息并将其转化为 Map -->
<select id="getUserInfoToMap" resultType="java.util.Map">
SELECT
u.id,
u.name,
c.card_no,
c.address
FROM
mybatis.user u
LEFT JOIN
card c ON u.card_id = c.id;
</select>
```
此段代码将会读取数据库表 mybatis.user 并左连接 card 表的信息,最后得到的结果会被放进一个 Map 当中,每一条记录对应着该 Map 下的一组键值对。
阅读全文
相关推荐



















