Mybatis实现映射,一次查询和嵌套查询

news2024/9/24 11:32:41

1.实现映射

Mybatis的最大魅力就在于它的语句映射。实现映射一般有一下三种方法:

当我们在数据库的列名和java中的属性名完全相同时,mybatis会自动映射并将查询结果封装。

对于由多个单词组成的名字时(例如studentgender),在java中使用标准驼峰命名(studentGender),在数据库中使用下划线连接命名(student_gender)。然后在mybatis的全局配置文件里面的settings即设置标签里面开启驼峰命名映射,也可以实现自动映射。

而有些情况需要在映射文件里面配置resultMap标签实现手动映射:

比如在多表关联的时候,往往就需要用该标签来实现。在这里主要讨论它的两个子标签的区别。       该标签里面有两个子标签:association(一个复杂类型的关联) 和 collection (一个复杂类型的集合)。

association标签主要用于多对一或者一对一的情况,collection主要用在一对多或者多对多的情况。

比如查询一个学生的信息,我们想知道他住的宿舍的一些相关信息,首先要明确一个学生肯定是在一个宿舍住着,也就是一对一的关系,那么我们查询一个学生的结果里面就包含一个宿舍类,这种情况就用association标签。

如果查询一个宿舍以及该宿舍里面的学生的一些相关信息,因为一个宿舍里面肯定是有多个学生的,也就是一对多的关系,那么我们查询一个宿舍的结果里面就包含一个泛型为学生的集合类,这个集合里面就包含该宿舍的每个学生的信息。这种情况就用collection标签。

2.一次查询和嵌套查询

在查询过程中,我们可以分为一次查询和嵌套查询两种。

一次查询:

sql语句只有一条,它直接通过sql语句把表关联起来然后拿到需要的数据。然后在resultMap标签里面把不同的数据封装到对应的对象里面。association标签只需属性property和javaType(这里用association标签举例说明)。

如图:假设查询一个学生的id,学号,姓名,性别,所在宿舍的宿舍号以及宿舍是几人间,还有对应的管理员帐户。

嵌套查询:

将一个多表关联查询拆分为多次查询,先查询主表数据,然后查询关联表数据。

sql语句有多条;association标签还需要添加select和column两个属性。锁定该标签对应的查询和外键。

如图:上述例子对应的嵌套查询

在进行宿舍的综合查询时,很明显地感觉到两者之间的一些差异,在日志里面可以看到一次查询就是直观地把sql语句执行的结果体现出来。而嵌套查询已经进行了一些封装。

假设有两个学生住在同一个宿舍,如果使用一次查询,在日志里面显示就是两条记录。但是嵌套查询会将这两个学生封装到一个宿舍的学生集合里面,这样在日志里面就是一条记录。也就是说如果使用嵌套查询,通过控制台的日志就可以看出是否达到我们想要的效果。

如图:这是在mysql中查询的语句和结果(这里只是普通的关联,没有使用分组)。可以看到总共有五条记录。但实际上老一和老三应该在一个宿舍里面,老二和老五应该在一个宿舍里面,所以应该是3条记录。

使用一次查询:

控制台显示的日志如图:

可以看到共有5条记录。

结果如图:

很明显看到,在同一个宿舍的同学被封装到一个集合里面,这样就成了三条记录。

使用嵌套查询:

控制台的日志如图:

 此时已经将在同一个宿舍的学生封装在一个宿舍的集合类里面

 结果如图:

可以看到,和一次查询得到的结果完全一样。

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

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

相关文章

C++ Builder XE关于TDateTime批量加减时间TTimerPiker的设置

void __fastcall TForm3::Button3Click(TObject *Sender) { TDateTime *DT new TDateTime(); //new TDateTime类型变量 *DTTPicker1->Time; //加 1 小时: DT (double)DT 1/24; //加 1 分钟: DT (double)DT 1/(24*60); //加 1 秒钟: DT (double)DT 1/(24*60*60); …

NUS CS1101S:SICP JavaScript 描述:三、模块化、对象和状态

原文:3 Modularity, Objects, and State 译者:飞龙 协议:CC BY-NC-SA 4.0 变化中安宁 (即使它在变化,它仍然保持不变。) ——赫拉克利特 变化越大,越是相同。 ——阿方斯卡尔 前面的章节介绍了构…

基于MAP算法的Turbo译码 -- 公式推导

到此为止,讲完了turbo译码器的子译码器基于MAP算法的译码过程。但在实际使用中,很少直接使用MAP算法进行译码。而是使用改进的LOG-MAP和MAX-LOG-MAP算法进行译码,因此译码的整体流程,包括外信息的计算以及先验信息的获取等。都在后…

SSM整合(实现简单查询功能)

在名为ssm的数据库内创建表 CREATE TABLE account (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) DEFAULT NULL,money double DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8; 创建工程 pom.xml <?xml version"1.0" encoding&quo…

C++学习笔记——标准模板库

目录 一、简介 二、STL概述 2.1STL是什么&#xff1f; 2.2STL的优势 三、容器&#xff08;Containers&#xff09; 3.1序列式容器&#xff08;Sequence Containers&#xff09; 3.2关联式容器&#xff08;Associative Containers&#xff09; 3.3容器适配器&#xff08;…

接雨水的四种姿势——一篇文章彻底弄懂接雨水问题

前言 leetcode 42. 接雨水是一道业内著名的hard题&#xff0c;多次出现在面试场上&#xff0c;经久不衰&#xff0c;难住了一届又一届的候选人。 作为leetcode上热度最高的题目之一&#xff0c;题目评论区也是好一番热闹景象。有人表示看了三天做不出来&#xff0c;有人在评论…

运用tomcat在浏览器中对数据库信息进行查询

在idea中创建好项目后&#xff0c;添加web项目 然后打开idea的setting&#xff0c;跳转到下面的页面&#xff0c;下载maven插件。 出现下面的选项&#xff0c;才正确。 添加好web项目后&#xff0c;打开pom文件&#xff0c;添加相应的依赖&#xff1a; <?xml version"…

基于SpringBoot+Vue实现的二手交易系统

系统介绍 校园二手交易网站是一种专门针对有二手物品交易需求用户的二手交易的网站。它的设计和开发主要是为了满足用户之间的二手物品交易需求&#xff0c;方便大家在线买卖二手物品。近年来&#xff0c;随着互联网技术的发展&#xff0c;人们越来越喜欢在线购物&#xff0c;…

node(express.js创建项目)+连接mysql数据库

1.node npm的安装 2.express的安装 全局安装:npm install express -gnpm install -g express-generator// ps: 4.0版本把generator分离出来了&#xff0c;需要单独安装3.创建express项目 express 项目名称 cd 项目名称 npm install npm start4.项目中安装数据库 npm install…

滴水内存地址堆栈

两个十六进制数 刚好是一个字节刚好 DC这的一个字节数据为E4 一个内存地址 后面表示四个字节的数据 所以有八个十六进制的数 BASE是高地址 所以放入一个四字节后就 -4

第87讲:XtraBackup备份工具的核心技术要点及全库备份、恢复案例

文章目录 1.XtraBackup备份工具的简介2.XBK备份工具的安装3.XBK备份工具的使用语法4.XBK备份前的准备5.使用XBK对全库进行备份5.1.XBK备份全库数据的语法格式5.2.使用XBK进行全库备份5.3.查看XBK备份的数据文件5.4.备份过程中生产的XBK文件 6.模拟故障案例并使用XBK恢复备份的数…

驾驭数字孪生:智慧水利的未来之路

一、数字孪生技术的原理与实践 随着科技的不断进步&#xff0c;数字孪生技术作为一项创新的技术应用&#xff0c;正在逐渐改变我们的生活和工作方式。特别是在工业领域&#xff0c;数字孪生技术被视为实现智能制造、提升生产效率和产品质量的重要手段。本章节将深入探讨数字孪…

git修改最新提交(commit)信息

一、修改最近一次commit信息 1、首先通过git log查看commit信息 2、使用命令git commit --amend进入命令命令模式&#xff0c;按i进入编辑模式&#xff0c;修改好commit信息后按Esc键退出编辑模式&#xff0c;然后输入:wq保存编辑信息&#xff08;注意使用英文输入法&#xf…

[Vulnhub靶机] DriftingBlues: 7

[Vulnhub靶机] DriftingBlues: 7靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/driftingblues/driftingblues7_vh.ova 靶机地址&#xff1a;192.168.67.27 攻击机地址&#xff1a;192.168.67.3 一、信息收集 …

[C#]使用winform部署PP-MattingV2人像分割onnx模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleSeg 【算法介绍】 PP-MattingV2是一种先进的图像和视频抠图算法&#xff0c;由百度公司基于PaddlePaddle深度学习框架开发。它旨在提供更精准和高效的图像分割功能&#xff0c;特别是在处理图像中的细微部分&#xf…

Kubernetes (十一) 存储——Secret配置管理

一. 简介 从文件创建 echo -n admin > ./username.txt echo -n westos > ./password.txt kubectl create secret generic db-user…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑥

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应分析处理并显示结果。返回结果“ax&#xff1a;”&#xff08;x为2、3或4&#xff09;&#xff1b;其中变量x、y均须为整型。编写程序代码&#xff0c;使用JUnit框架编写测试类对编写的程序代码进行测试…

【python】进阶--->MySQL数据库(二)

一、sql语句(结构化查询语言) 要和数据库进行交互,需要使用到数据库认识的语言 : sql语句 是关系型数据库都需要遵循的规范。不同数据库都支持sql语句,但是都有特有内容。 二、sql语句分类 数据定义语言 : 用来定义数据库–数据库,表,列. 数据操作语言 : 对数据库表中的记录进…

蓝桥杯回文日期判断

思想&#xff1a;对于回文数的判断方法&#xff0c;最快的就是取其中一半的字符串长度&#xff0c;为s&#xff0c;然后将其进行翻转为s’ &#xff0c;再把两者进行拼接即可保证是回文数&#xff0c;这样子就解决了枚举所有回文数的问题。 注意点&#xff1a; 要求必须是有效…

交叉编译ARM64架构electron详解

基本介绍 本文主要参考Electron官方文档中 构建说明 和 构建步骤(Linux) 在amd64环境内构建arm64的electron包。 如果是arm64环境请查看文章arm64架构编译electron长征路 一、环境说明 操作系统版本:统信1060 操作系统架构:amd64 内存:32G 如下图: electron版本:v25…