当前位置: 首页 > news >正文

java springboot整合MyBatis联合查询

前面文章 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())

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

相关文章:

java springboot整合MyBatis联合查询

前面文章 java springboot整合MyBatis做数据库查询操作写了springboot整合MyBatis的方法 并演示了基础查询的语法 根据id查 那么 我们这次来演示联合查询 我们staff 表 内容如下 每条数据 对应的都有一个departmentid 这是 department部门表的外键id department表内容如下 如…...

windows2022证书配置.docx

Windows证书的配置 要求两台主机&#xff0c;一台作为域&#xff0c;一台进入域 按要求来选择角色服务 确认之后安装 安装完以后配置证书服务 选择服务 按要求配置 注&#xff1a;此处不用域用户登陆无法使用企业CA 按要求来 创建新的私钥 这几处检查无误后默认即可 有效期…...

HCIP网络笔记分享——IA回顾及OSPF协议

第一部分 HCIA回顾1、网络基础2、动态路由协议3、路由认证4、路由控制&#xff08;AD metric &#xff09; 一、知识巩固二、场景模拟1、获取IP地址1.1 DHCP --- 动态主机配置协议1.1.1 DHCP客户端1.1.2 DHCP服务器1.1.3 DHCP客户端1.1.4 DHCP服务器 2、打开浏览器3、路由器进行…...

网络:IP地址、子网掩码、网络地址、广播地址、网段、网关

目录 一、IP地址 二、子网掩码 三、网络地址 四、广播地址 五、网段 六、网关 七、IP地址、子网掩码、网络地址、广指地址、网殷、网关的关系 参考链接 一、IP地址 IP地址是因特网协议&#xff08;IP&#xff09;中使用的一种数字标识符&#xff0c;用于唯一地标识网络…...

编程的未来 - 还有未来么?

缘起 唐门教主上个月某天深夜写了一篇博客 --《编程的未来》&#xff0c;要我谈谈感想。 这也是最近软件工程师们聊得比较多的问题&#xff0c;上周&#xff0c;在上海的 “关东小磨” 和十多位 CSDN 博主聚会的时候&#xff0c;大家也稍微谈了一下这个话题&#xff0c;但是谈…...

从零开始搭建群众权益平台(二)

这篇文章我们要建立的群众权益维护平台需要提供用户注册、登录、提交和查看问题或建议的功能,并且支持电话短信登录。在这个过程中,我们需要存储用户的登录信息。 我们将使用Node.js和Express.js作为后端框架,MongoDB作为数据库,并且使用Twilio服务发送短信验证码来实现手…...

Mysql之数据备份

一.日志 1.MySQL 的日志默认保存位置为 /usr/local/mysql/data2.修改日志配置文件 vim /etc/my.cnf [mysqld] ##错误日志&#xff0c;用来记录当MySQL启动、停止或运行时发生的错误信息&#xff0c;默认已开启 log-error/usr/local/mysql/data/mysql_error.log #指定日志的…...

【数据库数据恢复】SQL Server数据表结构损坏的数据恢复案例

数据库故障&分析&#xff1a; SQL server数据库数据无法读取。 经过初检&#xff0c;发现SQL server数据库文件无法被读取的原因是因为底层File Record被截断为0&#xff0c;无法找到文件开头&#xff0c;数据表结构损坏。镜像文件的前面几十M空间和中间一部分空间被覆盖掉…...

C语言/C++ 之 打飞机游戏

【项目简介】 1、设计思想&#xff1a;本项目主要是为了实现打飞机游戏&#xff0c;主要包括5个函数模块&#xff0c;和1个主函数框架。分别是chu_shi_hua();、you_cao_zuo&#xff1b;、wu_cao_zuo();、show()&#xff1b;、main();等。项目完成过程中主要运用了C/C中的输入输…...

在 Docker 中部署 Mino 并挂载配置文件

创建本地目录 首先&#xff0c;在主机上创建一个目录&#xff0c;用于存放 Mino 的配置文件。例如&#xff0c;创建一个名为 mino 的目录&#xff0c;用于存放 Mino 的配置文件。 mkdir mino拉取 Mino 镜像 使用以下命令从 Docker Hub 上拉取 Mino 的最新镜像&#xff1a; …...

无限脉动:释放音乐和区块链在音乐领域的力量

音乐是一种永恒的通用语言&#xff0c;它将人们聚集在一起&#xff0c;超越了边界&#xff0c;在我们灵魂深处产生共鸣&#xff0c;创造联系。在当今数字时代&#xff0c;随着区块链技术和去中心化网络的出现&#xff0c;音乐世界正在经历一场深刻的变革。 我们在与艺术家合作&…...

读发布!设计与部署稳定的分布式系统(第2版)笔记09_一窝蜂和容量

1. 停电事故后电力恢复的方式 1.1. 停电后常见的情形是&#xff0c;送电几秒钟后又再次断电 1.2. 数百万台空调和冰箱的用电需求&#xff0c;使刚刚恢复的电力供应发生过载 1.3. 当电力供应不足时&#xff0c;增加的电流很快就到达满负荷&#xff0c;导致过载&#xff0c;触…...

详解java定时任务

在我们编程过程中如果需要执行一些简单的定时任务&#xff0c;无须做复杂的控制&#xff0c;我们可以考虑使用JDK中的Timer定时任务来实现。下面LZ就其原理、实例以及Timer缺陷三个方面来解析java Timer定时器。 一、简介 在java中一个完整定时任务需要由Timer、TimerTask两个…...

PCIe卡设计方案:单路12Gsps 3G 带宽模拟信号源PCIe卡

一、板卡概述 单路3G带宽模拟信号源卡由DA子卡和PCIe底板组成&#xff0c;二者通过标准FMC连接器互联&#xff0c;可以实现将PCIe总线数据转换为一路高速的模拟量输出。北京太速科技板可广泛用于雷达、通信、光电领域的噪声信号、毛刺、脉冲信号模拟产生等领域。 二、 …...

第1章 计算机网络和因特网

1、主机或端系统通过&#xff08; &#xff09;接入因特网。 A. ISPB. 调制解调器C. 交换机D. 路由器 P21&#xff1a;端系统&#xff08;PC、智能手机、Web 服务器、电子邮件服务器等&#xff09;经过一个接入 ISP 与因特网相连。 2、‌主机一般被划分为两类&#xff1a;客…...

QT入门基础知识

什么是QT QT是一个跨平台的C图像用户界面应用程序框架QT在1991年由奇趣科技开发QT的优点 跨平台,几乎支持所有平台接口简单&#xff0c;容易上手一定程度上简化了内存回收机制有很好的社区氛围可以进行嵌入式开发 QWidget QT注意事项 命名规范 类名 首字母大写&#xff0c;单…...

Leetcode---350周赛

题目列表 6901. 总行驶距离 6890. 找出分区值 6893. 特别的排列 6447. 给墙壁刷油漆 一、总行驶距离 很显然&#xff0c;这题单纯就是一道数学应用题&#xff0c;我们要明白最关键的一点 &#xff1a;只有当mainTank>5并且additionalTank>0时&#xff0c;才能发生副油…...

Django通过Nginx和uWSGI实现负载均衡

Django是一款非常流行的Web应用程序框架&#xff0c;它允许开发人员以快速、简单和灵活的方式构建可扩展和可维护的Web应用程序。当你的应用程序开始变得越来越受欢迎时&#xff0c;你可能会发现需要使用负载均衡来确保应用程序的可用性和性能。在本文中&#xff0c;我们将介绍…...

单元测试框架——Junit5

文章目录 Junit1. 注解2.断言3.测试用例执行顺序4.测试套件Suite1) 指定多个类2) 指定包 5. 参数化1) 单参数2) 多参数3) 文件注入 6.动态参数 Junit Junit是一个开源的用于Java语言的单元测试框架&#xff0c;也是Java方向使用最广泛的单元测试框架。 在pom.xml中引入Junit5…...

centos 系列添加 yum 源

nginx 首先&#xff0c;安装 EPEL (Extra Packages for Enterprise Linux) 仓库。这是一个由 Fedora 项目提供的免费扩展软件包仓库&#xff0c;其中包含许多有用的软件包。 sudo yum install epel-release 接下来&#xff0c;导入 Nginx 的官方 GPG 密钥&#xff0c;以便验证安…...

基于SpringBoot + Vue的人工智能时代个人计算机的安全防护科普系统

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…...

OpenClaw+千问3.5-9B会议纪要:语音转文字自动生成重点

OpenClaw千问3.5-9B会议纪要&#xff1a;语音转文字自动生成重点 1. 为什么需要自动化会议纪要 每次开完会最头疼的就是整理会议纪要。作为团队里经常负责记录的人&#xff0c;我经历过太多这样的场景&#xff1a;会议中疯狂打字记录&#xff0c;结果漏掉关键讨论点&#xff…...

IceC:面向嵌入式平台的轻量级ICE兼容中间件

1. IceC&#xff1a;面向资源受限嵌入式平台的轻量级ZeroC ICE兼容中间件 1.1 设计定位与工程必要性 IceC并非ZeroC ICE的全功能移植&#xff0c;而是在AVR&#xff08;如ATmega328P&#xff09;和ESP8266等典型资源受限平台约束下&#xff0c;对ICE通信模型进行深度裁剪与重构…...

基于RBF(BP)神经网络与PID控制器的自适应控制:方波信号跟踪与参数调整

基于神经网络的自适应PID控制器 通过将RBF&#xff08;BP&#xff09;神经网络和PID控制器相结合&#xff0c;建立了神经网络PID控制器&#xff0c;采用传递函数进行系统建模&#xff0c;通过自动调整PID参数&#xff0c;实现了对方波信号的跟踪。 程序有注释PID控制器作为工业…...

机械臂轨迹规划中的S型速度优化算法设计与实现

1. 机械臂轨迹规划的核心挑战 机械臂运动控制中最关键的问题之一&#xff0c;就是如何让机械臂在保证平稳运行的前提下&#xff0c;以最短时间完成指定轨迹。想象一下工厂里的机械臂在流水线上快速精准地抓取零件——这个看似简单的动作背后&#xff0c;隐藏着复杂的运动学计算…...

革新性智能漫画翻译工具:解决本地化效率痛点,释放创作价值

革新性智能漫画翻译工具&#xff1a;解决本地化效率痛点&#xff0c;释放创作价值 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项…...

[颠覆性定位技术] Android厘米级定位方案:从算法移植到产业落地

[颠覆性定位技术] Android厘米级定位方案&#xff1a;从算法移植到产业落地 【免费下载链接】RtkGps Playing with rtklib on android 项目地址: https://gitcode.com/gh_mirrors/rt/RtkGps 在移动互联网与物联网深度融合的今天&#xff0c;位置服务已从传统的米级精度向…...

TypeC接口改造全攻略:从MicroUSB到TypeC的电路设计与PCB制作(含免费设计文件)

Type-C接口改造全攻略&#xff1a;从MicroUSB到Type-C的电路设计与PCB制作 最近整理工作室时翻出一堆老设备&#xff0c;清一色配备MicroUSB接口。看着手边越来越多的Type-C线材&#xff0c;突然意识到是时候给这些"老伙计"升级接口了。作为硬件开发者&#xff0c;我…...

告别窗口限制:WindowResizer让Windows桌面管理效率提升300%

告别窗口限制&#xff1a;WindowResizer让Windows桌面管理效率提升300% 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 在Windows系统使用过程中&#xff0c;您是否经常遭遇窗口尺…...

《算法题讲解指南:优选算法-字符串》--61.最长公共前缀,62.最长回文子串,63.二进制求和,64.字符串相乘

&#x1f525;小叶-duck&#xff1a;个人主页 ❄️个人专栏&#xff1a;《Data-Structure-Learning》《C入门到进阶&自我学习过程记录》 《算法题讲解指南》--优选算法 《算法题讲解指南》--递归、搜索与回溯算法 《算法题讲解指南》--动态规划算法 ✨未择之路&#xff0…...