Mybatis_SQL映射文件_联合查询_1

1、级联属性的方式封装查出的数据


    <!-- getKeyById(Integer) -->
    <!--
       private Integer id;//钥匙的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;//钥匙的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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值