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

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

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


q1.png

q6.png

q5.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>

q4.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>

q3.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>

q2.png

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

中,select快速获取的方式

q1.png


相关文章
|
1月前
|
XML Oracle Java
mybatis反向生成实体类、dao层以及映射文件
mybatis反向生成实体类、dao层以及映射文件
14 1
|
1月前
|
SQL Java 数据库连接
|
2月前
|
Java 数据库连接 Maven
使用mybatis插件generator生成实体类,dao层和mapper映射
使用mybatis插件generator生成实体类,dao层和mapper映射
50 0
|
3月前
|
SQL Java 数据库连接
MyBatis映射文件深入
MyBatis映射文件深入
62 0
|
3月前
|
SQL Java 数据库连接
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
【1月更文挑战第2天】 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
203 3
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
|
1月前
|
XML Java 数据库连接
【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......
【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......
51 0
|
1天前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
1月前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
15 1
|
1月前
|
SQL Java 关系型数据库
MyBatisPlus学习笔记(SpringBoot版)
MyBatisPlus学习笔记(SpringBoot版)
99 0
|
1月前
|
XML Java 数据库连接
【Mybatis】XML映射文件
【Mybatis】XML映射文件
27 0