mybatis collection解析以及和association的区别

本文详细介绍了 MyBatis 中的 collection 标签,用于解决一对多映射问题。通过示例代码和运行结果展示了如何使用 collection 标签将权限记录映射到用户对象的 list 中。接着,解析了 MyBatis 源码中处理嵌套结果映射的过程,指出 collection 和 association 的处理逻辑相似,主要区别在于属性的 javaType,以及在实际应用中根据一对多或一对一关系选择合适的标签。
摘要由CSDN通过智能技术生成

1.collection标签

说到mybatis的collection标签,我们肯定不陌生,可以通过它解决一对多的映射问题,举个例子一个用户对应多个系统权限,通过对用户表和权限表的关联查询我们可以得到好多条记录,但是用户信息这部分在多条记录中是重复的,只有权限不同,我们需要把这多条权限记录映射到这个用户之中,这个时候可以通过collection标签/association标签来解决(虽然assocation标签一般是解决一对一问题的,但它实际上也能实现我们的需求,可以通过后面的源码看出来)

1.1 相关代码和运行结果

实体类和mapper代码

@Data
public class UserDO {

  private Integer userId;

  private String username;

  private String password;

  private String nickname;

  // 将用户的权限信息映射到用户中
  private List<PermitDO> permitDOList;

  public UserDO() {}

  public UserDO(@Param("userId") Integer userId, @Param("username") String username, @Param("password") String password, @Param("nickname") String nickname) {
    this.userId = userId;
    this.username = username;
    this.password = password;
    this.nickname = nickname;
  }
}



@Data
public class PermitDO {

  private Integer id;

  private String code;

  private String name;

  private NodeTypeEnum type;

  private Integer pid;
}


// mybatis代码 
public interface UserMapper {

  UserDO getByUserId(@Param("userId") Integer userId);

}

<mapper namespace="org.apache.ibatis.study.mapper.UserMapper">

  <cache readOnly="false" flushInterval="5000" size="100" blocking="false">

  </cache>

  <resultMap id="BaseMap" type="org.apache.ibatis.study.entity.UserDO" autoMapping="true">
     <!--  user_id列用<id>标签,因为对一个用户来说,user_id肯定是唯一的 -->
    <id column="user_id" jdbcType="INTEGER" property="userId" />
    <result column="username" jdbcType="VARCHAR" property="username" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="nickname" jdbcType="VARCHAR" property="nickname"/>

    <!-- <collection> 映射多条权限记录 -->
    <collection property="permitDOList"
      resultMap="PermitBaseMap">

    </collection>
  </resultMap>

  <resultMap id="PermitBaseMap" type="org.apache.ibatis.study.entity.PermitDO">
    <id column="id" jdbcType="INTEGER" property="id"/>
    <result column="code" jdbcType="VARCHAR" property="code"/>
    <result column="name" jdbcType="VARCHAR" property="name"/>
    <result column="type" jdbcType="TINYINT" property="type"/>
    <result column="pid" jdbcType="INTEGER" property="pid"/>
  </resultMap&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值