resultMap
是 MyBatis 框架中用于定义数据库结果集与 Java 对象之间映射关系的核心标签。它的主要作用是解决数据库字段名与 Java 对象属性名不一致的问题,或处理复杂查询(如关联查询、嵌套对象、集合映射等)时的映射需求。
主要用途:
-
字段名与属性名不一致
当数据库表的字段名(如user_name
)和 Java 对象的属性名(如userName
)不一致时,通过resultMap
可以显式指定映射关系。<resultMap id="userMap" type="User"> <result property="userName" column="user_name"/> <result property="age" column="user_age"/> </resultMap>
2.映射复杂对象
处理嵌套对象(如一对一、一对多关系)。例如:
一对一关联:使用 <association>
映射单个对象。
一对多关联:使用 <collection>
映射集合。
<resultMap id="orderMap" type="Order">
<id property="id" column="order_id"/>
<result property="amount" column="order_amount"/>
<!-- 一对一关联 User 对象 -->
<association property="user" javaType="User">
<result property="userName" column="user_name"/>
</association>
<!-- 一对多关联 OrderItem 集合 -->
<collection property="items" ofType="OrderItem">
<result property="itemName" column="item_name"/>
</collection>
</resultMap>
示例场景:
假设数据库查询结果如下:
SELECT
id AS user_id,
name AS user_name,
age AS user_age
FROM users
而 Java 对象为:
public class User {
private Integer id;
private String name;
private Integer age;
// getters/setters...
}
使用 resultMap
标签 解决字段名不匹配:
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<result property="age" column="user_age"/>
</resultMap>
<select id="selectUser" resultMap="userResultMap">
SELECT * FROM users
</select>