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

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 MyBatis多对一的映射 一对多的映射,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文


解决多对一的映射

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


级联属性赋值

第一步: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映射文件:
在这里插入图片描述


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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/141560.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!