mybatis表高级查询映射关系及理解

一对一

<resultMap id="orderUserMap" type="Order" autoMapping="true">
        <!--这里的Order统统指是通过sql语句后的Order,不再刚开始那个Order表了-->
        <id column="id" property="id"/>
        <!-- 因为id比较特殊,唯一性,所以用id来进行映射-->
        <!--Type=order 是order类,Order类与order表进行映射-->
        <!--association:一对一关联映射 -->
        <!--property:属性名称-->
        <!--javaType:属性类型-->
        <!--autoMapping:自动映射-->
<!--一对一关系用association-->
        <association property="user" javaType="User" autoMapping="true">
        <id column="user_id" property="id"/>
        <!--  此处user_id有点理解的不太完美,不过跟detail_id类似,总之是User类与Order表关联,只不过detail_id 没有,是重新起的别名,而user_id是有的,所以直接用了,user是Order类的User属性的属性名-->
            <!--id:主键映射
                column:指定表中的列名
                property:对象的属性名称
                user_id ,order表里的字段
                id,User类里的属性
            -->
            <!--这段是将Order表里的字段与User类里的属性进行映射-->
    </association>

    </resultMap>

一对多

	<resultMap type="Order" id="orderUserDetailMap" autoMapping="true">
		<id column="id" property="id"/>
		<!--一对一关系用association-->
		<association property="user" javaType="User" autoMapping="true">
		<!--  User类与user表关联,user是Order类的User属性的属性名-->
			<id column="user_id" property="id"/>
		</association>
		<!-- 
			collection:一对多的查询
			property:属性名
			javaType:集合类型
			ofType:集合中的元素类型
			autoMapping:开启自动映射
			子标签:参照resultMap
		 -->
		 <!--一对多使用collection-->
		<collection property="detailList" javaType="list" ofType="Orderdetail" autoMapping="true">
        detailList:Order类的属性名,
        list:detailList属性的类型,
        Orderdetail:Order类中orderdetails属性泛型类型 ( List<Orderdetail>)
        List<Orderdetail> :orderdetails属性类型
		<id column="detail_id" property="id"/>
        detail_id:Order表里Orderdetail里的detail_id字段 (通过sql语句将Orderdetail里的id 别名为detail_id)参考下面的sql语句,
           id:是Orderdetail类的属性
           <!--这段的意思就是将Order表和Orderdetail的类进行映射-->
		</collection>
	</resultMap>
	
	<select id="queryOrderWithUserDetail" resultMap="orderUserDetailMap">
		select *,c.id as detail_id from tb_order a
			LEFT JOIN tb_user b on a.user_id=b.id
			LEFT JOIN tb_orderdetail c on a.id=c.order_id
		where a.order_number=#{number}
	</select>

多对多

  <resultMap type="Order" id="orderUserDetailItemMap" autoMapping="true">
		<id column="id" property="id"/>
		
		<!--一对一关系用association-->
		<association property="user" javaType="User" autoMapping="true">
		<!--  User类与user表关联,user是Order类的User属性的属性名-->
		<id column="user_id" property="id"/>
		</association>
	
	    <!--一对多使用collection-->
		<collection property="detailList" javaType="list" ofType="Orderdetail" autoMapping="true">
		<id column="detail_id" property="id">
	    <!--detail_id:Order表的detail_id字段 
	 (通过sql语句将Order里Orderdetail里的id 别名为detail_id)-->
       <!-- id:是Orderdetail类的属性-->
        <!--这段的意思就是将Order表和Orderdetail的类进行映射-->
        
             <!--一对一关系用association-->
             <!--嵌套在collection里,-->
		     <association property="item" javaType="Item" autoMapping="true">
             item:Orderdetail类的属性名
             Item:Orderdetail类的属性类型
			<id column="item_id" property="id"/>
			</association>
            <!--将Order表与Item类进行映射-->
		</collection>
	</resultMap>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值