java springboot整合MyBatis联合查询

news/2025/2/22 16:07:00/

前面文章 java springboot整合MyBatis做数据库查询操作写了springboot整合MyBatis的方法 并演示了基础查询的语法 根据id查

那么 我们这次来演示联合查询
我们staff 表 内容如下
在这里插入图片描述
每条数据 对应的都有一个departmentid 这是 department部门表的外键id
department表内容如下
在这里插入图片描述
如果你连主外键都还未掌握的话 建议先去用 MySql实现了 联合查询 再来用开发语言实现

然后 我们将 staff 代码修改如下

package com.example.textm.domain;public class staff {private int id;private String name;private int age;private int status;private int departmentid;private String departmentName;@Overridepublic String toString(){return "staff{"+"id"+id+"namne"+name+"age"+age+"status"+status+"departmentid"+departmentid+(departmentName != null?"departmentName"+departmentName:"")+"}";}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}public int getDepartmentid() {return departmentid;}public void setDepartmentid(int departmentid) {this.departmentid = departmentid;}public void setDepartmentName(String departmentName) {this.departmentName = departmentName;}public String getDepartmentName() {return departmentName;}
}

新加了一个departmentName是用来存 部门名称的 我们用MyBatis查询 直接挂我们需要的字段就好了 没必要整个对象都带进来
然后 我们在staffDao添加一个函数

Select("select s.*, d.name as departmentName from staff s inner join department d on s.departmentid=d.id;")
List<staff> getAllStaffWithDepartment();

我们 sql中已经写明 将 department代理为 d 然后 将d中的 name转为departmentName
这就是我说的 思路 如果你还有个age 继续往后加就好了

@Select("SELECT s.*, d.name AS departmentName, d.age AS departmentAge FROM staff s INNER JOIN department d ON s.departmentid=d.id;")
List<staff> getAllStaffWithDepartment();

然后 我们通过测试类 来调用getAllStaffWithDepartment
编写代码如下

System.out.println(staffDao.getAllStaffWithDepartment());

在这里插入图片描述
运行结果如下
在这里插入图片描述
我们的人员也都被带出了 部门信息

然后 在 domain目录下创建一个 department
这就是 department 表对应的属性类
参考代码如下

package com.example.textm.domain;import java.util.List;public class department {private int id;private String name;private List<staff> staffList;@Overridepublic String toString(){return "department{"+"id="+id+"name="+name+(staffList != null?staffList:"暂无员工")+"}";}public void setId(int id) {this.id = id;}public int getId() {return id;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setStaffList(List<staff> staffList) {this.staffList = staffList;}public List<staff> getStaffList() {return staffList;}
}

对加了一个 staffList 用来存 部门下的员工 类型当然就是一个staff员工类的list集合
然后 在dao下创建一个接口 叫 departmentDom
用来写 department这边的sql
然后 我们编写代码

package com.example.textm.dao;import com.example.textm.domain.department;
import org.apache.ibatis.annotations.*;import java.util.List;@Mapper
public interface departmentDom {@Select("SELECT d.id as deptId, d.name as deptName FROM department d")@Results(id = "departmentMap", value = {@Result(property = "id", column = "deptId"),@Result(property = "name", column = "deptName"),@Result(property = "staffList", column = "deptId", javaType = List.class,many = @Many(select = "com.example.textm.dao.staffDao.getStaffByDepartmentId"))})List<department> getAllDepartmentsWithStaff();
}

我们方法中的 sql是根据部门表 department 去查 顺便带出员工表外键对应的信息 我指定 id和name用自己的 staffList 通过staffDao接口的 getStaffByDepartmentId函数去获取

所以 我们staffDao接口还要再加一个函数 通过 部门id 查询 staff员工表 然后反应 staff员工类的list集合给他的函数

@Select("SELECT * FROM staff WHERE departmentid = #{departmentId}")
List<staff> getStaffByDepartmentId(int departmentId);

然后 在测试类中调用 departmentDom 的getAllDepartmentsWithStaff
首先 我们要写

@Autowired
private departmentDom departmentDom;

装配一下我们刚刚写的 departmentDom
然后调用

System.out.println(departmentDom.getAllDepartmentsWithStaff())

在这里插入图片描述
运行结果如下
在这里插入图片描述
我们部门下 也都带出了对应的员工信息


http://www.ppmy.cn/news/541541.html

相关文章

半导体|三星电子启动非日本产氟化氢性能试验

【TechWeb】7月17日消息&#xff0c;据国外媒体报道&#xff0c;三星电子已启动非日本产氟化氢性能试验。 三星电子 外媒报道称&#xff0c;三星电子在半导体工厂试验新材料的生产线上&#xff0c;开始投入日本以外厂商的氟化氢进行试验&#xff0c;这些产品被认为来自中国大陆…

众昂矿业刘金海:萤石是氟化工产品的主要前端原材料

氟化工产业链以萤石为起点&#xff0c;中上游主要为氢氟酸及氟化铝等&#xff0c;并延伸出氟制冷剂、含氟聚合物、含氟精细化学品和无机氟化物四大类&#xff0c;终端产品为空调及汽车用的制冷剂、工业含氟新材料、半导体领域中极其重要的电子级氢氟酸等。换句话说&#xff0c;…

众昂矿业刘金海:无水氢氟酸带动萤石需求

氢氟酸是现代氟化工的基础&#xff0c;是整个氟化工产业链的起点&#xff0c;是制取元素氟、各种含氟制冷剂、含氟新材料、无机氟化盐和有机氟化物等的基本原料。据了解&#xff0c;2020年世界无水氟化氢产能大约在370万吨&#xff0c;中国无水氟化氢产能占全球的67%&#xff0…

三星已开始测试中国产氟化氢 内存价格将继续上涨

【TechWeb】自日本对韩国进行半导体材料出口限制之后&#xff0c;三星作为韩国半导体龙头&#xff0c;成为受冲击最大企业&#xff0c;目前日本政府对韩国实行出口管制的对象主要包括氟聚酰亚胺、光刻胶及蚀刻气体&#xff08;氟化氢&#xff09;这3类半导体材料。韩国半导体厂…

ISO 5659-2塑料 烟生成 第2 部分:单室法测定烟密度试验方法

本标准适用于测定塑料燃烧时所产生烟雾的比光密度&#xff0c;并以最大比光密度为试验结果。它用于评定在规定条件下塑料的发烟性能。 ISO5659-2 建筑材料阻燃防火测试-标准名称&#xff1a; ISO 5659-2: 塑料&#xff0d;生烟性测定&#xff0d;第2部分&#xff1a;单烟箱光…

高效N型太阳能电池晶片清洗工艺的比较

引言 许多晶圆清洗技术都在竞争高效太阳能电池处理的使用。有些是从集成电路制造中借鉴而来的&#xff0c;在本工作中&#xff0c;对上述技术进行了定性比较&#xff0c;并在清洁效率和作为预扩散清洁的适用性方面对后三种技术进行了实验比较&#xff0c;所述预扩散清洁用于加…

六派巨量转移技术概述

1. 巨量转移技术概述 与OLED显示技术不同&#xff0c;无机LED无法在玻璃或其他大尺寸衬底进行大面积的制作&#xff0c;因此需要在半导体衬底上进行制作&#xff0c;然后再转移到驱动背板上。当前LED所采用的衬底一般为蓝宝石&#xff0c;但蓝宝石与外延层之间的晶格和热膨胀系…

TCPP-Pd(2+),CAS:94288-44-5,四羧基苯基卟啉钯

产品名称&#xff1a;四羧基苯基卟啉钯 英文名称&#xff1a;TCPP-Pd(2) CAS&#xff1a;94288-44-5 产地&#xff1a;西安 规格&#xff1a;1mg 5mg 10mg 纯度&#xff1a;99% 用途&#xff1a;仅用于科研 温馨提示&#xff1a;仅用于科研&#xff0c;不能用于人体实验&#x…