在 MyBatis 中进行一对一、一对多的关联查询,可以通过 associationcollection 标签配合 resultMap 进行配置。下面是一对一和一对多关联查询的配置示例:

一对一关联查询:

假设有两个表:useruser_profileuser_profile 中存储了用户的额外信息。

  1. 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>
  1. Java Mapper 接口:
public interface UserMapper {
    User getUserWithProfile(int userId);
}

一对多关联查询:

假设有两个表:postcomment,一个帖子对应多个评论。

  1. 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>
  1. Java Mapper 接口:
public interface PostMapper {
    Post getPostWithComments(int postId);
}

以上配置通过 associationcollection 标签,在 resultMap 中定义了一对一和一对多的关联关系,实现了查询结果的映射。在 SQL 查询语句中,通过 LEFT JOIN 等方式关联查询相关表的数据,并使用 resultMap 将结果映射到 Java 对象中。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.