使用mybatis框架进行数据库内容的多表查询

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>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值