MyBatis的resultMap详解
MyBatis resultMap 详解 MyBatis 中的 resultMap 是一个非常重要的概念,它负责将查询结果映射到 Java 对象中。在 MyBatis 中,我们可以使用两种方式来指定查询结果的返回类型,一种是使用 resultType,另一种是使用 resultMap。其中,resultType 是直接指定返回类型的,而 resultMap 则是对外部 ResultMap 的引用。 当我们使用 resultType 时,MyBatis 会将查询结果自动映射到对应的 Java 对象中,而当我们使用 resultMap 时,MyBatis 将查询结果存储在一个 Map 中,然后我们需要手动将其转换为对应的 Java 对象。 在 MyBatis 中,每一个查询映射的返回类型都是 ResultMap,只是当我们提供的返回类型属性是 resultType 时,MyBatis 会自动将 Map 中的键值对赋给 resultType 所指定的对象对应的属性,而当我们提供的返回类型是 resultMap 时,因为 Map 不能很好地表示领域模型,我们就需要自己再进一步地把它转换为对应的对象,这常常在复杂查询中很有作用。 例如,在上面的示例代码中,我们定义了一个 Blog 对象,其中包含 id、title、content、owner 等属性,以及一个 comments 属性,该属性是一个 List<Comment> 类型的对象。在 MyBatis 的配置文件 mybatis_config.xml 中,我们可以使用 typeAlias 来指定 Blog 对象的别名为 "Blog",然后在 select 语句中使用 resultType="Blog" 来指定查询结果的返回类型为 Blog 对象。 在查询映射时,MyBatis 会将查询结果自动映射到 Blog 对象中,其中每一个属性都会被自动赋值。但是,如果我们使用 resultMap 来指定返回类型,那么 MyBatis 将查询结果存储在一个 Map 中,我们需要手动将其转换为 Blog 对象。 例如,我们可以使用以下方式来定义 resultMap: ```xml <resultMap id="blogResultMap" type="com.tiantian.mybatis.model.Blog"> <id column="id" property="id" /> <result column="title" property="title" /> <result column="content" property="content" /> <result column="owner" property="owner" /> <collection property="comments" ofType="com.tiantian.mybatis.model.Comment"> <result column="comment_id" property="id" /> <result column="comment_content" property="content" /> </collection> </resultMap> ``` 在上面的示例中,我们定义了一个名为 "blogResultMap" 的 resultMap,该 resultMap 将查询结果映射到 Blog 对象中,其中每一个属性都会被自动赋值。 在 select 语句中,我们可以使用 resultMap="blogResultMap" 来指定返回类型为 resultMap: ```xml <select id="selectBlog" parameterType="int" resultMap="blogResultMap"> SELECT * FROM blog WHERE id = #{id} </select> ``` 这样,MyBatis 将查询结果存储在一个 Map 中,然后我们需要手动将其转换为 Blog 对象。 MyBatis 的 resultMap 是一个非常强大的工具,它可以帮助我们将查询结果映射到 Java 对象中,使得我们的开发更加方便和高效。