resultMap和resultType的区别的是什么
时间: 2024-05-13 18:17:10 浏览: 69
在 MyBatis 中,`resultMap` 和 `resultType` 都是用于描述查询结果的返回类型的。
`resultType` 用于指定单一的返回类型,可以是 Java 类型、基本类型或者是 MyBatis 自带的类型别名。例如:
```xml
<select id="selectUser" resultType="com.example.User">
SELECT * FROM users WHERE id = #{id}
</select>
```
这个例子中,查询结果将会被映射为 `com.example.User` 类型的对象。
相比之下,`resultMap` 可以更加灵活地描述映射关系。它允许你为不同的查询结果指定不同的映射规则,可以自定义属性和列名之间的映射关系,以及复杂类型和嵌套查询的映射。例如:
```xml
<resultMap id="userMap" type="com.example.User">
<id property="id" column="user_id" />
<result property="username" column="user_name" />
<result property="email" column="user_email" />
<association property="department" resultMap="departmentMap" />
</resultMap>
<select id="selectUser" resultMap="userMap">
SELECT u.id as user_id, u.username as user_name, u.email as user_email, d.id as dept_id, d.name as dept_name
FROM users u
LEFT JOIN departments d ON u.department_id = d.id
WHERE u.id = #{id}
</select>
<resultMap id="departmentMap" type="com.example.Department">
<id property="id" column="dept_id" />
<result property="name" column="dept_name" />
</resultMap>
```
这个例子中,我们使用了 `resultMap` 来自定义了 `User` 类型和 `Department` 类型的映射规则。`userMap` 中定义了 `User` 类型的映射规则,包括了 `id`、`username`、`email` 和 `department` 四个属性,其中 `department` 属性是一个嵌套查询,需要使用 `departmentMap` 来描述其映射规则。最后,我们在 `selectUser` 查询语句中使用了 `resultMap` 来指定查询结果的映射规则。
总的来说,`resultMap` 比 `resultType` 更加灵活,可以更加细粒度地描述查询结果的映射规则。但是,相对来说也更加复杂,需要更多的配置。
阅读全文