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

Mybatis多对多查询案例!

在MyBatis中执行多对多查询需要使用两个主要表和一个连接表(通常称为关联表)来演示。在这个示例中,我们将使用一个示例数据库模型,其中有三个表:`students`、`courses` 和 `student_courses`,它们之间建立了多对多关系。`students` 表存储学生信息,`courses` 表存储课程信息,`student_courses` 表用于将学生与他们所选的课程关联起来。

以下是如何在MyBatis中执行多对多查询的步骤:

1. 创建数据库表和数据。首先,确保你已经创建了适当的数据库表并插入了示例数据。以下是表的基本结构:

   - `students` 表包含 `student_id` 和 `student_name` 列。
   - `courses` 表包含 `course_id` 和 `course_name` 列。
   - `student_courses` 表用于将学生与课程关联,包含 `student_id` 和 `course_id` 列。

2. 创建 MyBatis 映射文件。你需要创建一个MyBatis映射文件来定义SQL查询。以下是一个示例映射文件的结构:

```xml

<mapper namespace="com.example.StudentCourseMapper"><select id="getStudentCourses" parameterType="int" resultMap="studentCourseResult">SELECT s.student_id, s.student_name, c.course_id, c.course_nameFROM students sJOIN student_courses sc ON s.student_id = sc.student_idJOIN courses c ON sc.course_id = c.course_idWHERE s.student_id = #{studentId}</select><resultMap id="studentCourseResult" type="com.example.StudentCourse"><result property="studentId" column="student_id"/><result property="studentName" column="student_name"/><result property="courseId" column="course_id"/><result property="courseName" column="course_name"/></resultMap>
</mapper>


```

3. 创建Java模型类。创建一个Java模型类来表示多对多关系的结果。例如,可以创建一个名为 `StudentCourse` 的类:

```java

public class StudentCourse {private int studentId;private String studentName;private int courseId;private String courseName;// 省略 getter 和 setter 方法
}


```

4. 创建Mapper接口。创建一个Mapper接口,定义用于执行多对多查询的方法:

```java

public interface StudentCourseMapper {List<StudentCourse> getStudentCourses(int studentId);
}


```

5. 配置MyBatis。在MyBatis的配置文件中配置数据源和映射文件。

6. 执行多对多查询。在应用程序中调用 `getStudentCourses` 方法,将学生的 `studentId` 作为参数传递:

```java

SqlSessionFactory sqlSessionFactory = MyBatisConfig.getSqlSessionFactory();
try (SqlSession session = sqlSessionFactory.openSession()) {StudentCourseMapper mapper = session.getMapper(StudentCourseMapper.class);List<StudentCourse> studentCourses = mapper.getStudentCourses(1); // 传入学生的IDfor (StudentCourse sc : studentCourses) {System.out.println("Student: " + sc.getStudentName() + ", Course: " + sc.getCourseName());}
}


```

这将执行查询,返回与给定学生相关的课程列表。

以上示例演示了如何在MyBatis中执行多对多查询。你可以根据自己的数据模型和需求进行相应的调整。

相关文章:

Mybatis多对多查询案例!

在MyBatis中执行多对多查询需要使用两个主要表和一个连接表&#xff08;通常称为关联表&#xff09;来演示。在这个示例中&#xff0c;我们将使用一个示例数据库模型&#xff0c;其中有三个表&#xff1a;students、courses 和 student_courses&#xff0c;它们之间建立了多对多…...

Android OpenCV(七十五): 看看刚”转正“的条形码识别

前言 2021年,我们写过一篇《OpenCV 条码识别 Android 平台实践》,当时的条形码识别模块位于 opencv_contrib 仓库,但是 OpenCV 4.8.0 版本开始, 条形码识别模块已移动到 OpenCV 主仓库,至此我们无需自行编译即可轻松地调用条形码识别能力。 Bar code detector and decoder…...

数据结构——布隆计算器

文章目录 1.什么是布隆过滤器&#xff1f;2.布隆过滤器的原理介绍3.布隆过滤器使用场景4.通过 Java 编程手动实现布隆过滤器5.利用Google开源的 Guava中自带的布隆过滤器6.Redis 中的布隆过滤器6.1介绍6.2使用Docker安装6.3常用命令一览6.4实际使用 1.什么是布隆过滤器&#xf…...

金融学复习博迪(第6-9章)

第6章 投资项目分析 学习目的&#xff1a;解释资本预算&#xff1b;资本预算基本法则 资本预算过程包含三个基本要素&#xff1a; 一提出针对投资项目的建议 一对这些建议进行评价 一决定接受和拒绝哪些建议 6.1项目分析的特性 资本预算的过程中的基本单位是单个的投资项目。投…...

解决idea登录github copilot报错问题

试了好多方案都没用&#xff0c;但是这个有用&#xff0c; 打开idea-help-edit custonm vm options 然后在这个文件里面输入 -Dcopilot.agent.disabledtrue再打开 https://github.com/settings/copilot 把这个设置成allow&#xff0c;然后重新尝试登录copilot就行就行 解决方…...

什么是Flex布局?请列举一些Flex布局的常用属性。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Flex布局&#xff08;Flexible Box Layout&#xff09;⭐ Flex布局的常用属性⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之…...

React + TypeScript + antd 常见开发场景

时间戳转格式 // 获取当前时间戳&#xff08;示例&#xff09; const timestamp Date.now(); // 或者使用特定的时间戳值// 创建一个新的Date对象&#xff0c;并传入时间戳 const date new Date(timestamp);// 获取年、月、日的值 const year date.getFullYear(); const mon…...

前端基础踩坑记录

前言&#xff1a;在做vue项目时&#xff0c;有时代码没有报错&#xff0c;但运行时却各种问题&#xff0c;没有报错排查起来就很费劲&#xff0c;本人感悟&#xff1a;写前端&#xff0c;需要好的眼神&#xff01;&#xff01;&#xff01;谨以此博客记录下自己的踩坑点。 一、…...

k8s删除pod镜像没响应marking for deletion pod TaintManagerEviction

使用命令强制删除 Pod的状态为"Marking for deletion"表示该Pod正在被标记为待删除状态&#xff0c;但实际上并没有被删除。这可能是因为以下原因之一&#xff1a; 删除操作被阻塞&#xff1a;可能是由于某些资源或容器正在使用该Pod&#xff0c;导致删除操作被阻塞…...

Nginx 使用 lua-nginx-module 来获取post请求中的request和response信息

如果想要在nginx中打印出 http request 的所有 header&#xff0c;需要在编译nginx时开启 1、安装编译所需的依赖 apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev2、创建下载路径 mkdir -p /opt/download3、下载所需的文件 # 不要下载…...

【Opencv】三维重建之cv::recoverPose()函数(1)

官网链接 从估计的本质矩阵和两幅图像中的对应点恢复相机之间的旋转和平移&#xff0c;使用光束法则进行检验。返回通过检验的内点数目。 #include <opencv2/calib3d.hpp>int cv::recoverPose ( InputArray E, InputArray points1, InputArray points2, InputArray …...

Perl兼容正则表达式函数-PHP8知识详解

在php8中有两类正则表达式函数&#xff0c;一类是perl兼容正则表达式函数&#xff0c;另一类是posix扩展正则表达式函数。二者区别不大&#xff0c;我们推荐使用Perl兼容正则表达式函数。 1、使用正则表达式对字符串进行匹配 用正则表达式对目标字符串进行匹配是正则表达式的主…...

Python处理空值NaN

fork_address_tempread_excel_column_to_list(./eqp_info.xls,Sheet1,车辆地址)for i in fork_address_temp:print(type(i))fork_address[0 if address nan else address for address in fork_address_temp]fork_address结果 <class float><class float><class…...

软件机器人助力交通运输局数据录入,实现高效管理

随着科技的迅速发展&#xff0c;许多传统的行业正在寻求通过科技创新优化工作流程、提升效率。在这样的大背景下&#xff0c;交通运输部门也开始注重引入科技手段改善工作流程。博为小帮软件机器人正逐步改变着交通运输局的工作方式。 软件机器人&#xff1a;交通管理的利器 博…...

时序分解 | MATLAB实现基于SGMD辛几何模态分解的信号分解分量可视化

时序分解 | MATLAB实现基于SGMD辛几何模态分解的信号分解分量可视化 目录 时序分解 | MATLAB实现基于SGMD辛几何模态分解的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 SGMD分解算法&#xff08;辛几何模态分解&#xff09;&#xff0c;分解结果可视…...

FinalShell报错:Swap file “.docker-compose.yml.swp“ already exists

FinalShell中编辑docker-compose.yml文件&#xff0c;保存时报错&#xff1a;Swap file ".docker-compose.yml.swp" already exists&#xff1b;报错信息截图如下&#xff1a; 问题原因&#xff1a;有人正在编辑docker-compose.yml文件或者上次编辑没有保存&#xff…...

卷积过程详细讲解

1&#xff1a;单通道卷积 以单通道卷积为例&#xff0c;输入为&#xff08;1,5,5&#xff09;&#xff0c;分别表示1个通道&#xff0c;宽为5&#xff0c;高为5。假设卷积核大小为3x3&#xff0c;padding0&#xff0c;stride1。 卷积过程如下&#xff1a; 相应的卷积核不断…...

代码随想录第五十六天

代码随想录第五十六天 Leetcode 583. 两个字符串的删除操作Leetcode 72. 编辑距离 Leetcode 583. 两个字符串的删除操作 题目链接: 两个字符串的删除操作 自己的思路:想到了&#xff0c;但是初始化初始错了&#xff01;&#xff01;&#xff01;&#xff01; 思路1:直接动规五…...

.NET 最便捷的Log4Net日志记录器

最便捷的Log4Net使用方法 LOG4NET 配置日志记录器开始引用nuget LOG4NET 配置日志记录器 Apache log4net 库是一个帮助程序员将日志语句输出到各种的工具 的输出目标。log4net是优秀的Apachelog4j™框架的移植 Microsoft.NET 运行时。我们保持了与原始log4j相似的框架 同时利…...

深入探讨软件逆向工程:解密黑盒的奥秘

引言 逆向工程作为计算机科学领域中的一项关键技术&#xff0c;扮演着解密、漏洞分析、反病毒等诸多领域的重要角色。本文将深入探讨逆向工程的概念、应用领域以及一些常用的逆向工程技术。 什么是逆向工程&#xff1f; 逆向工程是指通过分析已有的程序或设备&#xff0c;推…...

QT6.5串口编程第一步:用CMakeLists.txt引入SerialPort模块的避坑指南

QT6.5串口编程避坑指南&#xff1a;CMakeLists.txt配置全解析 当你满怀期待地在QT6.5项目中引入串口通信功能&#xff0c;却在编译时遭遇"找不到QtSerialPort"的红色错误提示&#xff0c;这种挫败感我深有体会。作为一位经历过无数次类似"战斗"的开发者&am…...

n600高效涡流选粉机设计【说明书 CAD图纸 开题报告 任务书 实习报告】

n600高效涡流选粉机作为粉体分级领域的核心设备&#xff0c;其设计聚焦于提升分级精度与处理效率。该设备通过优化涡流场分布与颗粒运动轨迹&#xff0c;实现微细粉体的高效分离。其核心作用在于利用离心力和气流的复合作用&#xff0c;使不同粒径的颗粒在旋转流场中产生差异化…...

Kimi-K2-W8A8量化版:推理精度反超官方!

Kimi-K2-W8A8量化版&#xff1a;推理精度反超官方&#xff01; 【免费下载链接】KIMI-k2-Thinking-W8A8-QuaRot 项目地址: https://ai.gitcode.com/Eco-Tech/KIMI-k2-Thinking-W8A8-QuaRot 导语&#xff1a;国内大模型量化技术再获突破——Kimi-K2-Thinking模型的W8A8量…...

Qwen3-14B私有化效果:支持国密算法加密的API通信安全方案

Qwen3-14B私有化效果&#xff1a;支持国密算法加密的API通信安全方案 1. 私有部署镜像概述 Qwen3-14B私有部署镜像是基于通义千问大语言模型优化定制的专业解决方案&#xff0c;特别针对RTX 4090D 24GB显存配置进行了深度适配。这个镜像不仅提供了完整的运行环境和模型依赖&a…...

Pylint魔法方法验证:10个技巧确保特殊方法符合Python规范的终极指南

Pylint魔法方法验证&#xff1a;10个技巧确保特殊方法符合Python规范的终极指南 【免费下载链接】pylint Its not just a linter that annoys you! 项目地址: https://gitcode.com/gh_mirrors/pyl/pylint Python开发者们&#xff0c;你是否曾为魔法方法&#xff08;dund…...

微信小程序数据绑定与渲染全解析:从入门到精通

微信小程序数据绑定与渲染实战指南&#xff1a;解锁高效开发密码 微信小程序开发中&#xff0c;数据绑定与渲染机制是构建动态界面的核心。不同于传统网页开发&#xff0c;小程序采用独特的双线程架构&#xff0c;数据通信需要特殊处理。本文将深入剖析数据绑定的底层原理&…...

从理论到实践:LSTM与Qwen1.5-1.8B GPTQ在时序预测任务中的对比

从理论到实践&#xff1a;LSTM与Qwen1.5-1.8B GPTQ在时序预测任务中的对比 最近在折腾时间序列预测&#xff0c;发现一个挺有意思的现象。大家一提到时序预测&#xff0c;脑子里蹦出来的第一个词可能就是LSTM&#xff0c;这几乎成了这个领域的“标配”。但另一边&#xff0c;以…...

3个维度解析G-Helper:华硕笔记本性能优化的轻量级解决方案

3个维度解析G-Helper&#xff1a;华硕笔记本性能优化的轻量级解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目…...

06. Flutter Hero动画实现:让界面过渡更加优雅

06. Flutter Hero动画实现&#xff1a;让界面过渡更加优雅 引言 Flutter 的 Hero 动画是一种神奇的过渡效果&#xff0c;它能让元素在不同页面之间平滑过渡&#xff0c;创造出连贯且令人愉悦的用户体验。作为一名把代码当散文写的 UI 匠人&#xff0c;我始终认为&#xff1a;好…...

基于偏振无关的传输相位调控技术,实现可见光超透镜的优化设计

基于传输相位的可见光超透镜 偏振无关搞过光学设计的工程师都知道&#xff0c;传统透镜那个笨重的曲面有多让人头疼。现在有了一种黑科技——可见光波段的超透镜&#xff0c;厚度只有几百纳米&#xff0c;却能实现传统透镜的光学效果。关键是这玩意儿还搞定了偏振相关性这个老大…...