MyBatis多对一的映射 一对多的映射

文章介绍了在MyBatis框架下如何处理多对一和一对多的映射关系,包括通过Association进行级联属性赋值,使用延迟加载优化查询效率,以及通过Collection实现一对多的映射。同时,提出了分步查询和延迟加载的概念,帮助减少不必要的数据获取。
摘要由CSDN通过智能技术生成


解决多对一的映射

加入我们在做公司管理系统的时候,我们员工的实体类和部门的实体类肯定是分开创建的呀,但如果此时我们现在想同时查出员工和他所在的部门信息,没有实体类来接收我们的映射,那怎么解决这样的问题呢?
在这里插入图片描述


级联属性赋值

第一步:Emp实体类里面添加一个Dept对象:
在这里插入图片描述
第二步:EmpMapper接口添加接口方法:
在这里插入图片描述
第三步:EmpMapper映射文件:
在这里插入图片描述
在这里插入图片描述


Assocaition

Assocaition是relaultMap里面自带的一种专门负责处理多对一映射关系的标签,如果说上面这个方法是创建了专门的属性来接收,那这个方法就是专门创建了对象
第一步:Emp实体类里面添加一个Dept对象:
在这里插入图片描述
第二步:EmpMapper接口添加接口方法:
在这里插入图片描述
第三步:EmpMapper映射文件:

 <!--处理多对一映射关系方式二:association-->
    <resultMap id="empAndDeptResultMapTWO" type="Emp">
        <id property="eid" column="eid"></id>
        <result property="empName" column="emp_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
        <!--
            association:处理多对一的映射关系
            property:需要处理多对的映射关系的属性名
            javaType:该属性的类型
        -->
        <association property="dept" javaType="Dept">
            <id property="did" column="did"></id>
            <result property="deptName" column="dept_name"></result>
        </association>
    </resultMap>


    <!-- Emp getEmpAndDept(@Param("eid") Integer eid);-->
    <select id="getEmpAndDept" resultMap="empAndDeptResultMapTWO">
        select * from t_emp left join t_dept on t_emp.did = t_dept.did where t_emp.eid = #{eid}
    </select>

分步查询

分步分步,顾名思义,将一个原本一下就干完的一件事情,我们分成两件事情来干,相同,那对于查询,我们是不是也可以把一句sql分成两句来执行,例如:
在这里插入图片描述
等价于
在这里插入图片描述
那么如何实现呢?
第一步:Emp实体类里面添加一个Dept对象:
在这里插入图片描述
第二步:EmpMapper接口添加接口方法:
在这里插入图片描述
第三步:EmpMapper映射文件:
在这里插入图片描述
在这里插入图片描述
第四步:DeptMapper接口添加接口方法:
在这里插入图片描述
第五步:DeptMapper映射文件:
在这里插入图片描述


延迟加载

什么是延迟加载?
看到我们上面提到的分布查询方法,我们是不是都会想,为什么还要那么麻烦?还要多此一举分成两步来解决这个问题呢?直接了当的一句它不香吗?其实你仔细想想如果分成两步,我们不单单只可以用它来解决那一个问题呀,如果我们直接想用其中的某一步方法对于Dept的那步方法来说我们可以直接调用,但对于Emp里面的那个方法他执行的时候不顺带把Dept里面的方法也执行了吗?
延迟加载:当前我们访问哪些信息,我们就会执行哪些sql语句

怎么样开启延迟加载呢?

第一步:配置文件
在这里插入图片描述
第二步:映射文件里面association标签里面修改fetchType属性:
在这里插入图片描述


解决一对多的映射

当你想查询一个部门的同时,顺带查出这个部门所有成员的信息

Collection

第一步:Dept实体类:
在这里插入图片描述

第二步:DeptMapper接口添加接口方法:
在这里插入图片描述
第三步:DeptMapper映射文件:
在这里插入图片描述


分布查询

第一步:Dept实体类:
在这里插入图片描述

第二步:DeptMapper接口添加接口方法:
在这里插入图片描述
第三步:DeptMapper映射文件:
在这里插入图片描述
第四步:EmpMapper接口添加接口方法:
在这里插入图片描述
第五步:EmpMapper映射文件:
在这里插入图片描述


总之总结一句话:多对一创对象,一对多创集合
在这里插入图片描述

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨宸杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值