以下是一个简单的集合映射的例子:
<resultMap id="userResultMap" type="com.example.model.User">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<!-- 配置一对多的关联 -->
<collection property="posts" ofType="com.example.model.Post" resultMap="postResultMap"/>
</resultMap>
<resultMap id="postResultMap" type="com.example.model.Post">
<id column="post_id" property="id"/>
<result column="title" property="title"/>
<result column="content" property="content"/>
</resultMap>
在这个例子中,userResultMap 中通过 <collection> 元素配置了一对多的关联关系,关联的目标是 postResultMap。
- property 属性指定了关联关系映射到 User 对象的哪个属性上,这里是 posts。
- ofType 属性指定了集合中元素的类型,这里是 com.example.model.Post。
- resultMap 属性指定了关联对象的结果映射规则,这里是 postResultMap。
这样配置后,当查询 User 对象时,MyBatis会自动查询关联的多个 Post 对象并将其映射到 User 对象的 posts 属性上。
嵌套查询
在集合映射中,可以使用嵌套查询来完成关联对象的加载。以下是一个使用嵌套查询的例子:
<resultMap id="userResultMap" type="com.example.model.User">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<!-- 配置嵌套查询的一对多的关联 -->
<collection property="posts" ofType="com.example.model.Post" resultMap="postResultMap">
<id column="user_id" property="userId"/>
</collection>
</resultMap>
<resultMap id="postResultMap" type="com.example.model.Post">
<id column="post_id" property="id"/>
<result column="title" property="title"/>
<result column="content" property="content"/>
</resultMap>
在这个例子中,userResultMap 中通过 <collection> 元素配置了嵌套查询的一对多的关联关系。
- <id> 元素用于配置关联对象查询的条件,这里表示查询条件是 Post 对象的 userId 列与 User 对象的 id 列的匹配。
通过嵌套查询,可以将关联对象的查询逻辑嵌套到主查询中,避免了多次查询数据库的开销。
这是一对多关联的基本配置方式,MyBatis还支持一对一关联和多对多关联,具体配置方式可以参考官方文档:[MyBatis - 关联](https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#Collection)。
转载请注明出处:http://www.pingtaimeng.com/article/detail/7013/MyBatis