MyBatis 关联映射深度解析:_association_ 与 _collection_ 实战教程


一、核心概念与适用场景

在 MyBatis 中,<association><collection> 用于处理对象间的关联关系,简化复杂查询到对象结构的映射。

标签 用途 对应关系 示例场景
<association> 映射 单个嵌套对象(“有一个”关系) 一对一、多对一 员工 (Emp) 属于一个部门 (Dept)
<collection> 映射 集合属性(“有多个”关系) 一对多、多对多 用户 (User) 拥有多个角色 (Role)

二、标签属性详解
1. <association> 属性
属性名 必填 说明
property POJO 中的属性名(如 Emp.dept)。
javaType 关联对象的完整类名(如 cn.cjxy.domain.Dept),通常 MyBatis 可自动推断。
resultMap 引用外部已定义的 ResultMap,适合复用映射规则。
column 当前查询中作为关联子查询参数的列名(格式 {prop=col1, prop2=col2}),适用于嵌套查询方式。
select 指向另一个 <select> 的 ID,用于延迟加载关联对象(需配置懒加载)。
2. <collection> 属性
属性名 必填 说明
property POJO 中的集合属性名(如 User.roles)。
ofType 集合元素的完整类名(如 cn.cjxy.domain.Role)。
resultMap 引用外部 ResultMap。
column 传递到嵌套查询的参数列,类似 <association>
select 执行嵌套查询的 <select> ID。

三、实战对比:用户代码解析与优化
**1. 代码1 (UserMapper.xml):多角色查询(一对多)
<resultMap id="userResultMap" type="User">
    <id column="id" property="id"/>
    <result column="username" property="username"/>
    <!-- ...其他字段映射 -->
    <!-- 错误:角色ID列名冲突 -->
    <collection property="roles" ofType="Role">
        <result column="id" property="roleId"/> <!-- 此处colum
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不是少爷.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值