在 MyBatis 中进行一对一、一对多的关联查询,可以通过 association
和 collection
标签配合 resultMap
进行配置。下面是一对一和一对多关联查询的配置示例:
一对一关联查询:
假设有两个表:user
和 user_profile
,user_profile
中存储了用户的额外信息。
- XML 配置:
<!-- 定义 User 类的 ResultMap -->
<resultMap id="userResultMap" type="User">
<id property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
<!-- 其他属性映射 -->
<!-- 定义关联查询的 UserProfile 对象 -->
<association property="profile" column="user_id" javaType="UserProfile">
<id property="profileId" column="profile_id"/>
<result property="profileInfo" column="profile_info"/>
<!-- 其他属性映射 -->
</association>
</resultMap>
<!-- 查询用户及其对应的 UserProfile 信息 -->
<select id="getUserWithProfile" resultMap="userResultMap">
SELECT u.user_id, u.user_name, p.profile_id, p.profile_info
FROM user u
LEFT JOIN user_profile p ON u.user_id = p.user_id
WHERE u.user_id = #{userId}
</select>
- Java Mapper 接口:
public interface UserMapper {
User getUserWithProfile(int userId);
}
一对多关联查询:
假设有两个表:post
和 comment
,一个帖子对应多个评论。
- XML 配置:
<!-- 定义 Post 类的 ResultMap -->
<resultMap id="postResultMap" type="Post">
<id property="postId" column="post_id"/>
<result property="postTitle" column="post_title"/>
<!-- 其他属性映射 -->
<!-- 定义关联查询的 Comment 集合 -->
<collection property="comments" ofType="Comment">
<id property="commentId" column="comment_id"/>
<result property="commentContent" column="comment_content"/>
<!-- 其他属性映射 -->
</collection>
</resultMap>
<!-- 查询帖子及其对应的评论信息 -->
<select id="getPostWithComments" resultMap="postResultMap">
SELECT p.post_id, p.post_title, c.comment_id, c.comment_content
FROM post p
LEFT JOIN comment c ON p.post_id = c.post_id
WHERE p.post_id = #{postId}
</select>
- Java Mapper 接口:
public interface PostMapper {
Post getPostWithComments(int postId);
}
以上配置通过 association
和 collection
标签,在 resultMap
中定义了一对一和一对多的关联关系,实现了查询结果的映射。在 SQL 查询语句中,通过 LEFT JOIN
等方式关联查询相关表的数据,并使用 resultMap
将结果映射到 Java 对象中。
Was this helpful?
0 / 0