【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


相关文章
|
6天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
3月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
4月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
87 3
|
4月前
|
Java 数据库连接 mybatis
mybatis映射关系(1-1 1-n n-n)
Mybatis 中的关系映射包括一对一、一对多和多对多。一对一映射可以通过ResultMap定义属性与字段的对应。一对多示例中,User类包含List&lt;Role&gt;,在User的mapper.xml中使用&lt;collection&gt;标签。多对一的情况,如Author与Blog,Blog的ResultMap中使用&lt;association&gt;来映射Author属性。多对多时,如部门与用户,通常需要中间表,并在双方实体中通过&lt;collection&gt;引用中间类,如UserForDept,来维护关系。
|
5月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
70 3
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
|
6月前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
6月前
|
算法 BI 数据库
MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作
MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作
364 3
|
6月前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
106 4