mybatis简单resultMap使用详解



MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs (Plain Old Java Objects, 普通的 Java 对象)映射成数据库中的记录。

在 MyBatis 中,resultMap 是一个非常强大的功能,它可以定义如何将查询结果的行映射到 Java 对象。下面是一个简单的 resultMap 的使用详解:

  1. 基本结构:

一个简单的 resultMap 的 XML 配置可能如下所示:

<resultMap id="UserResult" type="com.example.User">  
    <id property="id" column="user_id"/>  
    <result property="username" column="username"/>  
    <result property="password" column="password"/>  
</resultMap>

在这个例子中,我们定义了一个名为 UserResult 的 resultMap,它映射到 com.example.User 类型的对象。这个 resultMap 定义了如何从数据库的列映射到 Java 对象的属性。
2. 元素说明:

* `<resultMap id="..." type="...">`: 这是 `resultMap` 的基本定义。它有一个唯一的 ID 和一个类型,这个类型是你希望映射到的 Java 类的全限定名。  
* `<id property="..." column="..."/>`: 这个元素标识数据库表的主键列。`property` 属性是 Java 对象的属性名,`column` 属性是数据库表的列名。  
* `<result property="..." column="..."/>`: 这个元素用于标识非主键列的映射。其 `property` 和 `column` 的用法与 `<id>` 元素相同。

使用方式:

在 MyBatis 的 SQL 映射文件中,你可以使用 <select><insert><update> 或 <delete> 等元素引用 resultMap。例如:

<select id="getUserById" resultMap="UserResult">  
    SELECT * FROM user WHERE user_id = #{id}  
</select>

在这个例子中,我们定义了一个查询,它返回一个 UserResult 类型的对象(即我们的 resultMap)。当 MyBatis 执行这个查询时,它会使用我们在 UserResult 中定义的映射规则来设置 Java 对象的属性。
4. 复杂映射:

有时,一个对象的属性可能对应数据库表中的多个列。例如,一个地址可能由多个列组成(街道、城市、国家等)。在这种情况下,你可以使用 <collection> 或 <association> 元素来定义更复杂的映射规则。
5. 注意事项:

* 确保你的 `resultMap` 与你的查询匹配。例如,如果你的查询只选择某些列,而你的 `resultMap` 试图映射所有列,那么你可能会遇到问题。  
* 当你的数据库列名和 Java 对象属性名不匹配时,你可以使用别名来帮助映射。例如,你可以在 `resultMap` 中为列或属性定义别名。

 总结:

MyBatis 的 resultMap 功能非常强大,它允许你完全控制如何将数据库的行映射到 Java 对象。通过合理地使用 resultMap,你可以提高应用程序的性能并减少错误。