为了方便演示这个细节,我们首先创建一些 model:
// 轮子
public class Wheel {
...
}
// 汽车的轮子
public class CarWheel extends Wheel {
// 汽车的轮子相较于轮子,没有特定的属性
}
// 后备箱
public class Trunk {
...
}
// 汽车的后备箱
public class CarTrunk extends Trunk {
// 汽车的后备箱相较于后备箱,没有特定的属性
}
// 汽车
public class Car {
private List<CarWheel> wheels; // 汽车有好几个轮子
private CarTrunk trunk; // 汽车只有一个后备箱
}
现在,假设我们要用 Mybatis 查询汽车,需要在 xml 文件中配置映射关系如下:
<resultMap id="carMap" type="Car">
<collection property="wheels" resultMap="carWheelMap"></collection>
<association property="trunk" resultMap="carTrunkMap"></association>
</resultMap>
<resultMap id="carWheelMap" type="Wheel">...</resultMap>
<resultMap id="carTrunkMap" type="CarTrunk">...</resultMap>
可以看到,在 <collection> 中使用的 carWheelMap 里,type 是可以为父类 Wheel 的;而在 <association> 中使用的 carTrunkMap 里,type 必须为明确的 CarTrunk,否则查询时会报错 Could not set property ……