resultType无法帮助我们自动的去完成映射,所以只有使用resultMap手动进行映射
(单表查询中autoMapping默认开启,在多表查询中,需要手动配置)
resultMap:
type:结果集对应的数据类型
id:唯一标识,被引用的时候,进行指定
autoMapping:开启自动映射
extends:集成
子标签:
association:配置对一的映射
property:定义对象的属性名
javaType:属性的类型
collection:配置对多的映射
property:定义对象的属性名
javaType:集合的类型
ofType:集合中的元素类型
<?xml version="1.0" encoding="UTF-8" ?>
PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-mapper.dtd”>
<resultMap id="orderUserLazyResultMap" type="Order">
<id column="id" property="id"></id>
<!--
select:延迟加载的时候,调用指定的sql语句进行查询
column:表示,延迟加载的语句中的参数来源
-->
<association property="user" javaType="User" select="queryUserByIdOfOrder" column="{id=user_id}"></association>
</resultMap>
<select id="queryOrderUserLazy" resultMap="orderUserLazyResultMap">
select * from tb_order where order_number = #{orderNumber}
</select>
<select id="queryUserByIdOfOrder" resultType="User">
select * from tb_user where id = #{id}
</select>
<resultMap id="orderAndUserAndOrderdetailAndItemResultMap" type="Order" autoMapping="true" extends="orderAndUserResultMap">
<!--<id column="id" property="id"></id>-->
<!--<association property="user" javaType="User" autoMapping="true">-->
<!--<id column="uid" property="id"></id>-->
<!--</association>-->
<collection property="orderdetails" javaType="List" ofType="Orderdetail" autoMapping="true">
<id column="detail_id" property="id"></id>
<association property="item" javaType="Item" autoMapping="true">
<id column="iid" property="id"></id>
</association>
</collection>
</resultMap>
<select id="queryOrderAndUserAndOrderdetailAndItemByOrderNumber" resultMap="orderAndUserAndOrderdetailAndItemResultMap">
SELECT
*,u.id as uid,od.id as detail_id,i.id as iid
FROM
tb_order o
INNER JOIN tb_user u ON o.user_id = u.id
inner join tb_orderdetail od on od.order_id = o.id
inner join tb_item i on i.id = od.item_id
WHERE
o.order_number = #{orderNumber}
</select>
<!--一对多查询-->
<resultMap id="orderAndUserAndOrderdetailResultMap" type="Order" autoMapping="true" extends="orderAndUserResultMap">
<!--<id column="id" property="id"></id>-->
<!--<association property="user" javaType="User" autoMapping="true">-->
<!--<id column="uid" property="id"></id>-->
<!--</association>-->
<!--配置Order和Orderdetail一对多的关系
property:Orderdetail在Order对象中的属性名称
javaType:属性的类型,集合的类型
ofType:集合中的元素类型
-->
<collection property="orderdetails" javaType="List" ofType="Orderdetail" autoMapping="true">
<id column="detail_id" property="id"></id>
</collection>
</resultMap>
<select id="queryOrderAndUserAndOrderdetailByOrderNumber" resultMap="orderAndUserAndOrderdetailResultMap">
SELECT
*,u.id as uid,od.id as detail_id
FROM
tb_order o
INNER JOIN tb_user u ON o.user_id = u.id
inner join tb_orderdetail od on od.order_id = o.id
WHERE
o.order_number = #{orderNumber}
</select>
<!--Order和User一对一的查询-->
<resultMap id="orderAndUserResultMap" type="Order" autoMapping="true">
<!--配置Order的主键映射-->
<id column="id" property="id"></id>
<!--配置Order和User一对一的映射
property属性:User对在Order中的属性名称
javaType属性:属性的类型
-->
<association property="user" javaType="User" autoMapping="true">
<!--配置User的主键-->
<id column="user_id" property="id"></id>
</association>
</resultMap>
<select id="queryOrderAndUserByOrderNumber" resultMap="orderAndUserResultMap">
SELECT
*,u.id as uid
FROM
tb_order o
INNER JOIN tb_user u ON o.user_id = u.id
WHERE
o.order_number = #{orderNumber}
</select>