1、级联属性的方式封装查出的数据
<!-- getKeyById(Integer) -->
<!--
private Integer id;
private String keyName;
private Lock lock;
id keyname lockid lid lockName
-->
<select id="getKeyById" resultMap="keymap1">
select k.id kid,k.keyname,k.lockid,l.id lid,l.lockname from t_key k
LEFT JOIN t_lock l ON k.lockid=l.id
where k.id =1
</select>
<!-- 自定义封装规则:使用级联属性封装联合查询出的结果 -->
<resultMap id="keymap" type="com.czl.bean.Key">
<id property="id" column="kid"></id>
<result property="keyName" column="keyname"></result>
<result property="lock.id" column="lid"></result>
<result property="lock.lockName" column="lockname"></result>
</resultMap>
<!-- mybatis推荐的 <association property=""></association>-->
<resultMap id="keymap2" type="com.czl.bean.Key">
<id property="id" column="kid"></id>
<result property="keyName" column="keyname"></result>
<!-- 接下来的属性是一个对象,自定义这个对象的封装规则;使用association;表示联合了一个对象 -->
<!-- javaType:指定这个属性的类型 -->
<association property="lock" javaType="com.czl.bean.Lock">
<!-- 定义lock属性对应的这个Lock对象如何封装 -->
<id property="id" column="lid"></id>
<result property="lockName" column="lockname"></result>
</association>
</resultMap>
2、使用association定义联合查询的对象的封装规则
<!-- getKeyById(Integer) -->
<!--
private Integer id;
private String keyName;
private Lock lock;
id keyname lockid lid lockName
-->
<select id="getKeyById" resultMap="keymap2">
select k.id kid,k.keyname,k.lockid,l.id lid,l.lockname from t_key k
LEFT JOIN t_lock l ON k.lockid=l.id
where k.id =1
</select>
<!-- mybatis推荐的 <association property=""></association>-->
<resultMap id="keymap2" type="com.czl.bean.Key">
<id property="id" column="kid"></id>
<result property="keyName" column="keyname"></result>
<!-- 接下来的属性是一个对象,自定义这个对象的封装规则;使用association;表示联合了一个对象 -->
<!-- javaType:指定这个属性的类型 -->
<association property="lock" javaType="com.czl.bean.Lock">
<!-- 定义lock属性对应的这个Lock对象如何封装 -->
<id property="id" column="lid"></id>
<result property="lockName" column="lockname"></result>
</association>
</resultMap>
3、collection定义集合类型属性的封装规则
<mapper namespace="com.czl.dao.LockDao">
<select id="getLockById" resultMap="mylock">
select l.*,k.id kid,k.`keyname`,k.`lockid` from t_lock l
left join t_key k on l.`id`=k.`lockid`
where l.id=#{id}
</select>
<!--
Lock.java:
private Integer id;
private String lockName;
private List<Key> keys;
id lockName kid keyname lockid
3 303办公室的锁子 3 303钥匙1 3
3 303办公室的锁子 4 303钥匙2 3
3 303办公室的锁子 5 303钥匙3 3
-->
<resultMap type="com.czl.bean.Lock" id="mylock">
<id property="id" column="id"/>
<result property="lockName" column="lockName"/>
<!--
collection:定义集合元素的封装
property="":指定哪个属性是集合属性
javaType:指定对象类型;association
ofType="":指定集合里面元素的类型
-->
<collection property="keys" ofType="com.atguigu.bean.Key">
<!-- 标签体中指定集合中这个元素的封装规则 -->
<id property="id" column="kid"/>
<result property="keyName" column="keyname"/>
</collection>
</resultMap>
</mapper>