是的,MyBatis 可以执行一对多、一对一等复杂的关联查询,实现方法主要有以下几种:
一对多关联查询:
- 使用嵌套查询(Nested Queries): 在主查询中嵌套子查询,通过嵌套的方式查询相关联的多个对象。
示例:
<select id="selectBlogWithPosts" resultMap="blogWithPostsResult"> SELECT * FROM blogs <where> id = #{id} </where> </select> <resultMap id="blogWithPostsResult" type="Blog"> <id property="id" column="id"/> <result property="title" column="title"/> <!-- 嵌套查询 --> <collection property="posts" ofType="Post" resultMap="postResult"> SELECT * FROM posts WHERE blog_id = #{id} </collection> </resultMap> <resultMap id="postResult" type="Post"> <id property="id" column="id"/> <result property="content" column="content"/> </resultMap>
- 使用关联查询(Association): 在映射文件中通过 Association 标签映射关联对象,建立一对多的关联。
示例:
<resultMap id="blogResult" type="Blog"> <id property="id" column="id"/> <result property="title" column="title"/> <!-- 关联查询 --> <association property="author" column="author_id" javaType="Author" select="selectAuthor"/> <collection property="posts" ofType="Post" column="id" select="selectPostsForBlog"/> </resultMap>
一对一关联查询:
- 使用关联查询(Association): 类似于一对多的关联查询,通过 Association 标签映射一对一的关联。
示例:
<resultMap id="blogResult" type="Blog"> <id property="id" column="id"/> <result property="title" column="title"/> <!-- 关联查询 --> <association property="author" column="author_id" javaType="Author" select="selectAuthor"/> </resultMap>
- 嵌套查询方式: 类似一对多的嵌套查询方式,可以通过嵌套查询实现一对一的关联。
以上两种方式可以根据实际情况和需求选择,通过 MyBatis 提供的嵌套查询或关联查询来实现一对多、一对一的关联查询操作。
Was this helpful?
0 / 0