SpringBoot中基于Mybatis-Plus多表联查(无xml,通过注解实现)

话不多说,开鲁

@Select注解:其实就是在注解后加上相应的sql语句,写法与xml中的一致。
@Results注解:有个id属性,可以理解为定义了一个方法,可以通过id引用,引用方式:ResultMap(“”)。@Results可以理解为一个结果集的映射,里面可以添加多个@Result。
@Result注解:与xml中的《result/》差不多。主要解释的是many=@Many(),该属性指定的这个类的属性对应的结果是多个数据,即包装在list当中。还有的就是one=@One(),顾名思义,这就是单个对象。
实践出真知,不多说了,直接通过实例来学习吧!

需要解决问题

需要查询这个学生所选的所有课程,查询结果为:
学生id,学生name,课程Course对象的list集合
和查询这个教师所教的所有课程,查询结果为:
教师id,教师name,课程Course对象的list集合
上述问题实际上是一致的,可通过解决其一然后通过C+V解决
下面我们就学生来解决。
实际呢,学生类Student只有两个属性,那就是
id,name(数据库与其一致)

而Course类也只有两个属性,也是
id,name(数据库与其一致)
我们需要通过二者的关系表查询出我们想要的Course对象的list集合

这个关系表为Takes,也为Takes类。其属性有
id,studentId,courseId(数据库与其一致)

数据库部分:

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (`id` int NOT NULL,`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,PRIMARY KEY (`id`),KEY `name` (`name`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('18120107', '学生九');
INSERT INTO `student` VALUES ('18120108', '学生十号');
INSERT INTO `student` VALUES ('18120101', '张三');
INSERT INTO `student` VALUES ('18120102', '李四');
INSERT INTO `student` VALUES ('18120103', '王五');
INSERT INTO `student` VALUES ('18120105', '田七');
INSERT INTO `student` VALUES ('18120104', '赵六');
INSERT INTO `student` VALUES ('18120106', '陈八');DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (`id` int NOT NULL,`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,PRIMARY KEY (`id`),KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `takes`;
CREATE TABLE `takes` (`id` int NOT NULL AUTO_INCREMENT,`student_id` int NOT NULL,`course_id` int NOT NULL,`course_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,PRIMARY KEY (`id`),KEY `fk_takes_student_id` (`student_id`),KEY `fk_takes_course_id` (`course_id`),KEY `fk_takes_course_name` (`course_name`),CONSTRAINT `fk_takes_course_id` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `fk_takes_course_name` FOREIGN KEY (`course_name`) REFERENCES `course` (`name`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `fk_takes_student_id` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

全文就这里是最关键的了
首先,外部查询出这个学生对象,在@Results注解内,表示返回的实际结果集,
前面两个@Result,就是学生id和name了,这里不用说
主要是第三个@Result,通过javaType=List.class,many=@Many来指定这个Result的属性(通过CourseMapper中的方法来查询这个list集合)注意:要写方法名的全名称,包名+类名+方法名

@Select("select * from student where id=#{id}")@Results({@Result(column="id",property="id",id=true),@Result(column = "name",property = "name"),@Result(column="id",property="courses",javaType= List.class,many=@Many(select="com.usst.mapper.CourseMapper.queryCoursesByStuId"))})Student queryStuById(@Param("id") Integer id);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1540008.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

学术新手进阶:Zotero插件全解锁,打造你的高效研究体验

作为一名刚入学的研究生,我真的快被文献和项目压垮了! 每天都在海量论文里游泳,感觉自己就像一只无助的小鱼,随时可能被信息的海啸吞没。直到...我发现了Zotero这个神器! 姐妹们,听我说,这绝对…

了解Node开发基础知识

目录 定义架构应用场景安装版本工具代码执行REPL传递参数输出全局对象 定义 Node.js 是一个基于 V8 JavaScript 引擎构建的运行时环境,允许你在服务器端运行 JavaScript 代码。Node.js 允许开发者使用 JavaScript 编写服务器端代码,实现前后端代码的统一…

Windows【环境 01】服务器系统重装后的服务恢复(ES\Redis\Jafka\Tomcat)环境变量和服务注册

服务器系统重装后的服务恢复 1.原因2.问题处理2.1 JDK2.2 Elasticsearch2.3 Redis2.4 Jafka2.5 Tomcat 3.总结 1.原因 Windows 服务器系统盘损坏,换了硬盘并重做了系统,其他磁盘未损坏但安装的服务无法正常运行了,包括: Elastic…

2.计算机网络基础

2. 计算机网络基础 (1) 计算机网络的定义 计算机网络是指将地理位置不同、具有独立功能的多个计算机系统通过通信线路和设备连接起来,以功能完善的网络软件实现网络中资源共享的系统。最简单的定义是:计算机网络是一些互相连接的、自治的计算机系统的集合。最庞大的计算机网…

JAVA-期末成绩计算

要求 总评成绩 期末成绩*0.6 平时成绩*0.4 输入总评成绩和平时成绩&#xff0c;输出期末成绩要考几分&#xff08;0<平时成绩<40&#xff0c;0<总评成绩<100&#xff09; 要求能多次运行&#xff08;退出程序停止&#xff09; 代码 import java.util.Scanne…

db2恢复数据库

db2licm -l检查下license IBM Support: Fix Central - Please wait, Select fixes db2 force application all db2ckbkp -H JYC.0.DB2.NODE0000.CATN0000.20240603223001.001 db2 "restore db jyc logtarget x:\db2\log" db2 "rollforward db jyc to end of log…

前端vue-复选框或者是下拉框的选择

单选框以及复选框还是下拉框都和name的值没有关系&#xff0c;但是他们之间得写&#xff0c;data中要写标签内v-model的值&#xff0c;在data中这个v-model绑定的值的值是value中的其中一个值或者是多个值&#xff0c;是默认选中的状态。

C++之深拷贝和浅拷贝*

两者本质&#xff1a; 浅拷贝&#xff1a;简单的赋值拷贝操作 深拷贝&#xff1a;在堆区中重新申请空间&#xff0c;进行拷贝操作new & delete 注意事项&#xff1a;堆区是在地址中重新申请空间&#xff0c;所以后续一系列操作new delete是通过指针* age进行操作&#xff0…

委托的注册和注销

让我们来回顾一下委托的内容。 委托 是一种复杂的数据类型&#xff0c;需要我们先定义出来。当定义好类型后&#xff0c;声明委托变量来使用。 可以装载方法&#xff0c;只可以装载具有相同返回类型和参数列表的方法。 委托变量名&#xff08;参数列表&#xff09;&#xf…

进击J7:对于ResNeXt-50算法的思考

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 本周任务是自行探索解决问题&#xff0c;通过此次思考过程逐渐将知识层面的学习过渡到能力层面的培养上。 一、任务 &#x1f4cc; **你需要解决的疑问&…

Zend Studio 13.6.1汉化中文版

在线汉化地址 https://download.eclipse.org/technology/babel/update-site/R0.16.1/2018-12/ 后面一直Next&#xff0c;最后让它后台自动安装 汉化完成 &#xff01;其实还是习惯用英文版&#xff01;&#xff01;&#xff01;&#xff01;&#x1f600;

Tableau Einstein 重磅亮相,融合 AI 与数据云提供统一且无缝的分析新体验!

通过内置可重复使用和可扩展的组件、语义 AI 和统一的数据&#xff0c;来加速不同部门和领域的用户工作流程。 近日&#xff0c;为期三天的 Dreamforce 2024 年度大会&#xff08;下文简称 DF24&#xff09;在美国旧金山隆重举行。 其中&#xff0c;最受关注的莫过于 Salesfor…

动态路由---OSPF协议基础

一、动态路由 1.1、定义 动态路由是指在网络通信过程中&#xff0c;路由器根据当前网络的状态和拓扑结构等信息&#xff0c;动态计算出最优的数据传输路径。这一过程依赖于路由器之间的路由信息交换和路由表的维护。当网络拓扑结构发生变化时&#xff0c;如链路故障或节点增减…

.NET 一直跻身 30 大Github最活跃开源项目之列。

大家好&#xff0c;我是编程乐趣。 一直以来都在介绍.Net的热门开源项目&#xff0c;今天来说说.Net本身。 .Net在GitHub上也是一个开源项目&#xff0c;.NET 是一个由 Microsoft 和 .NET 社区共同维护的开源跨平台框架。 自 2017 年以来&#xff0c;.NET 一直是 GitHub 上最…

Debian 12上安装google chrome

当前系统&#xff1a;Debian 12.7 昨天在Debian 12.7上安装Google Chrome时&#xff0c;可能由于网络原因&#xff0c;导入公钥始终失败。 导致无法正常使用命令#apt install google-chrome-stable来安装google chrome; 解决办法&#xff1a; Step1.下载当前google chrome稳…

【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;7000字长文&#xff0c;希望本文内容能够帮助到你&#xff01; 目录 一&#xff1a;创建线程五种方式 方式一&#xff1a;继承Thread类&#xff0c;…

需求2:新加字段

从今天开始&#xff0c;我想把我之前写的一些小的&#xff0c;简单的需求都通过文章的方式写出来&#xff0c;一方面是回顾梳理之前所学的知识&#xff0c;另一方面也是为了方便以后回看&#xff0c;好记性不如烂笔头。 现在的问题是这样的&#xff1a; 涛哥希望&#xff0c;加…

电脑技巧:Win11家庭版和专业版之间的区别详解

目录 一、操作系统安装层面 二、 操作系统安全层面 三、虚拟化和远程功能方面 四、硬件支持方面 五、企业管理方面 六、价格方面 七、软件功能方面 八、适合人群方面 九、如何选择 Windows 11操作系统提供了多个的版本(SKU),包括适合家庭用户的家庭版、适合专业人士…

C++刷怪笼(5)内存管理

一.前言 学习完类和对象之后&#xff0c;我们对C有了基本的了解&#xff0c;但是我们对于C的学习&#xff0c;除了广度&#xff0c;还需要深度&#xff0c;今天让我们走进底层&#xff0c;看看C对其内存是如何进行管理的。 二.正文 我们对这段代码进行详细的分析如下图&#…

微信支付开发-支付工厂H5产品代码

一、H5支付产品、Native支付产品 二、工厂父类抽象类代码开发 <?php /*** 微信父类抽象类* User: 龙哥三年风水* Date: 2024/9/19* Time: 11:33*/ namespace Payment\WechatPay; abstract class WechatPaymentHandle {/*** 下单* User: 龙哥三年风水* Date: 2024/9/19* Ti…