MyBatis中的关联关系以及多表连接

这篇具有很好参考价值的文章主要介绍了MyBatis中的关联关系以及多表连接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一对一

一对多

多对多

关联关系总结


一对一

一张表的一条记录对应查询到另一张表的一条记录,重要的是实体中的一个对象也要包含另一个对象

实例,一个乘客查询到一本护照

实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Passenger {
    private Integer id;
    private String name;
    private String sex;
    private Date birthday;
    private Passport passport;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Passport {
    private Integer id;
    private String nationality;
    private Date expire;
    private Integer passenger_id;
}

dao层

 public Passenger selectByPassengerId(Integer id);

mapper语句

<resultMap id="rm" type="passenger">
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <association property="passport" javaType="passport">
            <id property="id" column="pid"></id>
            <result property="expire" column="expire"></result>
        </association>
    </resultMap>
​
    <select id="selectByPassengerId" resultMap="rm">
        select pg.*,pp.id pid,pp.expire from t_passports pp INNER JOIN
        t_passengers pg on pg.id=pp.passenger_id and pg.id=#{id};
    </select>

测试层

 @Test
    public void PassengerText(){
        PassengerDao passengerDao = MyBatisUtils.getMapper(PassengerDao.class);
        Passenger passenger = passengerDao.selectByPassengerId(1001);
        System.out.println(passenger);
    }

一对多

mapper语句

<resultMap id="rm" type="dept">
        <id property="id" column="did"></id>
        <result property="name" column="dname"></result>
        <result property="location" column="dlocation"></result>
        <collection property="emps" ofType="emp">
            <id property="id" column="id"></id>
            <result property="name" column="name"></result>
            <result property="salary" column="salary"></result>
            <result property="dept_id" column="dept_id"></result>
        </collection>
    </resultMap>
    <select id="selectByEmpId" resultMap="rm">
        select e.*,d.id did,d.name dname,d.location dlocation from t_departments d INNER JOIN
        t_employees e on e.id=d.id where e.id=#{id};
    </select>

实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {
    private Integer id;
    private String name;
    private double salary;
    private Integer dept_id;
    
}
 
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
    private Integer id;
    private String name;
    private String location;
    private List<Emp> emps;
}

dao层

public Dept selectByEmpId(Integer id);

测试层

@Test
    public void selectEmpText(){
        DeptDao deptDao = MyBatisUtils.getMapper(DeptDao.class);
        Dept dept = deptDao.selectByEmpId(1);
        System.out.println(dept);
    }

多对多

dao层

public List<Student> selectBySbId(Integer id);

测试层

@Test
    public void SubjectText(){
        SubjectDao subjectDao = MyBatisUtils.getMapper(SubjectDao.class);
        List<Student> students = subjectDao.selectBySbId(10);
        System.out.println(students);
    }

mapper

<resultMap id="rm" type="subject">
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <result property="grade" column="grade"></result>
        <collection property="students" ofType="student">
            <id property="id" column="tid"></id>
            <result property="name" column="tname"></result>
            <result property="sex" column="tsex"></result>
        </collection>
    </resultMap>
    <select id="selectBySbId" resultMap="rm">
        select sb.*,st.id tid,st.name tname,st.sex tsex from student st INNER JOIN
        stu_sub ss on ss.student_id=st.id INNER JOIN subject sb
        on sb.id=ss.subject_id and sb.id=10;
    </select>

实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
    private Integer id;
    private String name;
    private String sex;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Subject {
    private Integer id;
    private String name;
    private Integer grade;
    private List<Student> students;
}

关联关系总结

双方建立关系属性后,对应的mapper文件中要使用<ResultMap>完成多表之间的映射

持有对象关系属性(一对一):< association property="" javaType="" >

持有集合关系属性(一对多或多对一):文章来源地址https://www.toymoban.com/news/detail-540029.html

到了这里,关于MyBatis中的关联关系以及多表连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 认识Mybatis的关联关系映射,灵活关联表对象之间的关系

    目录      一、概述 ( 1 )  介绍 ( 2 )  关联关系映射 ( 3 ) 关联讲述 二、一对一关联映射 2.1 数据库创建 2.2 配置文件  2.3 代码生成 2.4 编写测试 三、一对多关联映射 四 、多对多关联映射 给我们带来的收获 关联关系映射是指在数据库中,通过定义 表之间的关联关系 ,将多

    2024年02月11日
    浏览(44)
  • MyBatis注解开发---实现自定义映射关系和关联查询

    目录 相关导读 一、使用注解实现自定义映射关系 1. 编写注解方法 2. 编写测试方法

    2023年04月09日
    浏览(40)
  • MyBatis 的关联关系配置 一对多,一对一,多对多 关系的映射处理

    目录 一.关联关系配置的好处  二. 导入数据库表:  三.    一对多关系:--    一个订单对应多个订单项        四.一对一关系:---一个订单项对应一个订单 五.多对多关系(两个一对多)          MyBatis是一个Java持久化框架,可以 通过XML或注解的方式 将对象与数据库

    2024年02月11日
    浏览(61)
  • mybatis xml多表查询,子查询,连接查询,动态sql

    student_type 表 student 表 Student 类 一个学生只有一个年级 Type 类 一个年级有多个学生,所以用 list 下列代码中: 1 resultMap 里面property对应实体类属性,column对应数据库字段名 2 主键用 id 标签 其他用result 3 关联查询(子查询和连接查询) 连接查询查一次 4 一个年级多个学生,所以

    2024年01月21日
    浏览(56)
  • Mybatis中的关系映射

    目录 前言 1.一对一的映射关系 1.1 创建模型类和Vo类  1.2 配置当前模型类的mapper.xml 1.3 开始测试 2.一对多的映射关系 2.1 创建模型类和Vo类 2.2 配置当前模型类的mapper.xml 2.3 开始测试 3.多对多的映射关系 总结  注意点:  一对一映射(One-to-One Mapping) : 一对一关系指的是两个

    2024年02月09日
    浏览(35)
  • MyBatis 表连接查询写法|三种对应关系

    ❤️作者主页:微凉秋意 ✅作者简介:后端领域优质创作者🏆,CSDN内容合伙人🏆,阿里云专家博主🏆 ✨精品专栏:C++面向对象 🔥系列专栏:JavaWeb 上篇博文把基础部分记录了,本篇是对 表连接查询 中一对一,一对多,多对多关系写法区别的记录总结。 前提最少是两张表

    2024年01月21日
    浏览(33)
  • Mybatis的三种映射关系以及联表查询

    目录 一、概念 二、一对一 1、配置generatorConfig.xml 2、Vo包的编写 3、xml的sql编写 4、编写对应接口及实现类 5、测试 三、一对多 1、Vo包类的编写 2、xml的sql编写 3、编写对应接口及实现类 4、测试 四、多对多 1、Vo类 2、xml的sql配置 3、接口及接口实现类 4、测试 1、MyBatis中表之间

    2024年02月10日
    浏览(46)
  • 【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

    SSM( S pring、 S pringMVC、 M yBatis) Apache Shiro SpringBoot 事务 :若将 N 个 数据库操作 (CRUD)放到同一个事务中,则这 N 个数据库操作最终要么全都生效,要么全都不生效 🍀 开启事务【 START TRANSACTION 】 🍀 回滚事务:若事务中的某个数据库操作失败,其他所有数据库操作都需要

    2024年02月08日
    浏览(78)
  • 【Mybatis系列】Mybatis空值关联

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年01月17日
    浏览(38)
  • MyBatis多表查询

    目录 1. 多表关系回顾 2. 一对一查询 2.1 一对一多表查询方式一:基于标签进行手动结果映射封装  2.2 一对一多表查询方式二 - 通过标签来封装属性中所关联的对象 3. 一对多查询 4. 多对多查询 在项目开发当中一对一关系的表不常见,因为一对一关系的两张表通常会合并为一

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包