【MyBatis】学习笔记12:通过级联属性赋值解决多对一的映射关系

【Mybatis】学习笔记01:连接数据库,实现增删改

【Mybatis】学习笔记02:实现简单的查

【MyBatis】学习笔记03:配置文件进一步解读(非常重要)

【MyBatis】学习笔记04:配置文件模板

【MyBatis】学习笔记05:获取参数值的两种方式

【MyBatis】学习笔记06:各种查询所返回数据的数据类型

【MyBatis】学习笔记07:模糊查询

【MyBatis】学习笔记08:批量删除

【MyBatis】学习笔记09:批量删除

【MyBatis】学习笔记10:添加功能获取自增的主键

【MyBatis】学习笔记11:解决字段名和属性的映射关系

Mybatis12:通过级联属性赋值解决多对一的映射关系

image.png

image.png

image.png

Way01:级联属性赋值

//查询商品以及商品对应的供应商
public SmbmsBill getBillAndProvider(@Param("bid") String bid);
    <!--        public SmbmsBill getBillAndProvider(@Param("bid") String bid);-->
    <resultMap id="BillAndProviderMapOne" type="SmbmsBill">
        <id property="id" column="id"/>
<!--    property里面写的是对象的属性字段,column里面写的是数据库中的列名-->
        <result property="productName" column="productName"/>
        <result property="billCode" column="billCode"/>
        <result property="totalPrice" column="totalPrice"/>
        <result property="isPayment" column="isPayment"/>
        <result property="provider.id" column="providerId"/>
        <result property="provider.proCode" column="proCode"/>
        <result property="provider.proName" column="proName"/>
        <result property="provider.proContact" column="proContact"/>
        <result property="provider.proPhone" column="proPhone"/>
    </resultMap>
    <select id="getBillAndProvider" resultMap="BillAndProviderMapOne">
        select * from smbms_bill left join smbms_provider on smbms_bill.providerId=smbms_provider.id
        where smbms_bill.id=#{bid}
    </select>

image.png

Way02:association

association:处理多对一的映射关系

property:需要处理多对一的映射关系的属性名

javaType:该属性的类型(对象)

    <!--        public SmbmsBill getBillAndProvider(@Param("bid") String bid);-->
    <resultMap id="BillAndProviderMapOne" type="SmbmsBill">
        <id property="id" column="id"/>
<!--    property里面写的是对象的属性字段,column里面写的是数据库中的列名-->
<!--	处理的是属性和字段的映射关系	-->
        <result property="productName" column="productName"/>
        <result property="billCode" column="billCode"/>
        <result property="totalPrice" column="totalPrice"/>
        <result property="isPayment" column="isPayment"/>
        <association property="provider" javaType="SmbmsProvider">
            <id property="id" column="id"/>
            <result property="proCode" column="proCode"/>
            <result property="proName" column="proName"/>
            <result property="proContact" column="proContact"/>
            <result property="proPhone" column="proPhone"/>
        </association>
    </resultMap>
    <select id="getBillAndProvider" resultMap="BillAndProviderMapOne">
        select * from smbms_bill left join smbms_provider on smbms_bill.providerId=smbms_provider.id
        where smbms_bill.id=#{bid}
    </select>

image.png

Way03:分步查询

【interface】orderMapper.java

/**
 * 分布查询:查询商品和对应的供应商信息
 * 分步查询第一步:查询商品信息
 *
 */
public SmbmsBill getBillAndProviderStepOne(@Param("bid") String bid);

【interface】providerMapper.java

 /**
     * 分布查询:查询商品和对应的供应商信息
     * 分步查询第一步:查询商品信息
     *分步查询第二步:查询供应商信息
     */
    public SmbmsBill getBillAndProviderStepTwo(@Param("pid") String pid);

orderMapper.xml

<!--    【多表联结】分步查询-->
    <resultMap id="BillAndProviderMapOne" type="SmbmsBill">
        <result property="productName" column="productName"/>
        <result property="billCode" column="billCode"/>
        <result property="totalPrice" column="totalPrice"/>
        <result property="isPayment" column="isPayment"/>
        <!--下方的select设置的是分布查询的sql的唯一标识(namespace.SQLId或napper接口的 全类名/方法名)-->
        <association property="provider" select="cc.mllt.jdbc.utils.providerMapper.getBillAndProviderStepTwo" column="providerId"/>
        <!--上面的colum设置的分步查询的条件,也就是第二步查询的语句要查哪一句-->
    </resultMap>
<!--    public SmbmsBill getBillAndProviderStepOne(@Param("bid") String bid);-->
<select id="getBillAndProviderStepOne" resultMap="BillAndProviderMapOne">
    <!--    select productName '商品名称',totalPrice '订单金额',isPayment '是否付款' from smbms_bill where id=#{bid}-->
    select * from smbms_bill where id=#{bid}
    </select>

providerMapper.xml

<!--    public SmbmsBill getBillAndProviderStepTwo(@Param("pid") String pid);-->
    <select id="getBillAndProviderStepTwo" resultType="SmbmsProvider">
        <!--select proCode '供应商编码',proName '供应商名称',proContact '供应商联系人',proPhone '供应商联系电话' from smbms_provider where id=#{pid}-->
        select * from smbms_provider where id=#{pid}
    </select>

image.png

<association property="provider" select="cc.mllt.jdbc.utils.providerMapper.getBillAndProviderStepTwo" column="providerId"/>

中,select快速获取的方式

image.png

posted @ 2022-04-15 19:39  萌狼蓝天  阅读(215)  评论(0编辑  收藏  举报