一对一
<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>