Mybatis的联合查询

数据库表结构

Mybatis的联合查询
department
Mybatis的联合查询
employee
Mybatis的联合查询
Mybatis的联合查询

要求一

现在的要求是输入 id 把 employee 表的对应员工数据查询出来,并且查询出该员工的所处部门信息

JavaBean

public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private String gender;
    private Department dept;
    setter和getter.......

}
public class Department {
    private Integer id;
    private String departmentName;
    setter和getter.......

}

1、级联属性封装结果集

实现

这个要求很明显就要用到两个表,想要把部门信息封装到 Employee对象的dept字段需要用到 resultMap属性

方法一


    select e.*, d.id did, d.department_name
    from employee e,
        department d
    where e.d_id = d.id
    and e.id = #{id}

方法二


    select e.*, d.id did, d.department_name
    from employee e,
        department d
    where e.d_id = d.id
    and e.id = #{id}

测试

    @Test
    public void test1() {
        SqlSession sqlSession = MyTest.getSqlSession();
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        System.out.println(mapper.getEmployee(1));
    }

结果

Mybatis的联合查询

2、分步查询

方法

DepartmentMapper.xml


    select * from department where id = #{id}

EmployeeMaper.xml


    select * from employee where id = #{id}

测试

    @Test
    public void test1() {
        SqlSession sqlSession = MyTest.getSqlSession();
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        System.out.println(mapper.getEmployee2(1));
    }

结果

Mybatis的联合查询

要求二

现在的要求是输入 id 把 department 表对应的部门信息查询出来,并且查询该部门下的所有员工信息

JavaBean

public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private String gender;
    setter和getter.......

}
public class Department {
    private Integer id;
    private String departmentName;
    private List employees;
    setter和getter.......

}

1、级联属性封装结果集

方法


    select d.*, e.id eid, e.last_name, e.email, e.gender
    from department d
        left join employee e on d.id = e.d_id
    where d.id = #{id}

测试

    @Test
    public void test2() {
        SqlSession sqlSession = MyTest.getSqlSession();
        DepartmentMapper mapper = sqlSession.getMapper(DepartmentMapper.class);
        System.out.println(mapper.getDepartment(1));
    }

结果

Mybatis的联合查询

2、分步查询

EmployeeMaper.xml


    select *
    from employee
    where d_id = #{did}

DepartmentMapper.xml


    select *
    from department
    where id = #{id}

测试

    @Test
    public void test2() {
        SqlSession sqlSession = MyTest.getSqlSession();
        DepartmentMapper mapper = sqlSession.getMapper(DepartmentMapper.class);
        System.out.println(mapper.getDepartment3(1));
    }

结果

Mybatis的联合查询

Original: https://www.cnblogs.com/workhah/p/15759172.html
Author: WorkHaH
Title: Mybatis的联合查询

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572536/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 校验用户名是否存在案例

    案例 校验用户名是否存在 服务器响应的数据,在客户端使用时,要想当作json数据格式使用 $.get(type):将最后一个参数tupe指定为”json” …

    Java 2023年6月6日
    057
  • 戏说领域驱动设计(廿一)——领域服务

    实体对象和值对象都写完了,本想开始写资源仓库顺便把工作单元再搞搞。不过有一点麻烦的是我不太想把工作单元作为单独的一章来写,一是这东西网上相关的内容太多;二是有的时候使用Spirng…

    Java 2023年6月7日
    089
  • RabbitMQ普通集群准备环境

    原文:https://www.jianshu.com/p/85f40e52e625 注意,三台服务器,RabbitMQ集群节点必须在同一网段,如果是跨域,效果会变差。关闭防火墙和s…

    Java 2023年5月30日
    079
  • 普通企业的规划类项目中,OptaPlanner更适合作为APS的规划优化引擎

    在企业的规划、优化场景中,均需要开发规划类的项目,实现从各种可能方案中找出相对最优方案。如排班、生产计划(包括高层次的供应链优化,到细粒度的车间甚至机台作业指令)、车辆调度等。因为…

    Java 2023年6月16日
    084
  • Java终止线程的三种方式

    停止一个线程通常意味着在线程处理任务完成之前停掉正在做的操作,也就是放弃当前的操作。 在 Java 中有以下 3 种方法可以终止正在运行的线程: 使用退出标志,使线程正常退出,也就…

    Java 2023年5月29日
    082
  • 猿猿有责,维持整洁的 Git 提交记录,三个锦囊送给你

    背景 大家都有学习如何规范简洁的 编写代码,但却很少学习如何规范简洁的 提交代码。现在大家基本上都用 Git 作为源码管理的工具,Git 提供了极大的灵活性,我们按照各种 work…

    Java 2023年6月5日
    0103
  • 日语语法总结九 —- 日语句型

    原文发表时间:2008-09-21 16:26 1.名词句: 今日は日曜日だ。 今天是星期天。 2.形容词句: 日本の夏は蒸し暑い。日本的夏天很闷热。 3.形容动词句: 中国の万里…

    Java 2023年5月30日
    056
  • 【Q&A】Fixing NuGet.targets(131,5) error The local source doesn’t exist

    当出现类似的nuget错误的时候 The local source ‘C:\Program Files (x86)\Microsoft Visual Studio\Shared\N…

    Java 2023年6月8日
    061
  • 常用Linux命令之文件相关命令(一)

    一、文件显示命令 1、cat命令: cat命令连接文件并打印到标准输出设备上,经常用来显示文件的内容,相当于DOS下的type命令 cat命令的一般格式: cat [选项] 文件名…

    Java 2023年6月8日
    0129
  • 记一次docker compose的低级错误

    记一次docker compose的低级错误 问题 ​ 今天在学习dockercompose的时候,启动docker compose up,结果却出现异常 Error respon…

    Java 2023年6月8日
    074
  • Maven依赖包导入错误(IntelliJ IDEA):java.lang.OutOfMemoryError: GC overhead limit exceeded

    一、问题背景 最近用IntelliJ IDEA 打开一个老应用,一直加载依赖不成功,主POM中存在如下错误. java.lang.OutOfMemoryError:GC overh…

    Java 2023年5月29日
    061
  • Java基础语法(一)

    Java基础语法(一) 道阻且长,行则将至,行而不辍,未来可期。 ——《荀子·修身》 Java基础语法(一) – 一、Java注释 二、关键字和保留字 三、标识符 四、…

    Java 2023年6月9日
    066
  • Docker的常用基本命令

    基本命令 官网:https://docs.docker.com/engine/reference/commandline/docker/ 查看容器CPU状态 docker stat…

    Java 2023年6月5日
    068
  • 如何跳出页面的Frame框架

    很多网页都是框架结构的,在很多的情况下会通过按钮点击事件或链接,跳出框架转到其它界面。 使用的过程中会经常遇到跳不出框架的问题。 例如,修改个人密码的时候,当密码修改成功以后,需要…

    Java 2023年6月5日
    096
  • 分布式学习基础知识

    新文章 分布式学习基础知识 网络通讯,网络是分布式的基础,对分布式的理解建立在对网络的理解上,包括: OSI模型的7层 TCP/IP,DNS,NAT HTTP,SPDY/HTTP2…

    Java 2023年6月7日
    072
  • 项目十大管理(五)质量管理

    首先来看看关于质量的定义: 反应实体满足主体明确和隐含需求的能力的特性总和(ISO) 一组固有特性满足要求的程度(GB/T19000-2008) 质量是对一个产品(或服务)满足程度…

    Java 2023年6月6日
    062
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球