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

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条记录。

结果如图:

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

使用嵌套查询:

控制台的日志如图:

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

 结果如图:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB | 龙年大吉,使用MATLAB绘制会动的中国风神龙

hey各位好久不见,龙年到了,这期画一期配色非常中国风的龙,这个造型的龙参考了某些html绘制龙的视频,但是由于html版全网都是也不咋给代码和代码出处,因此自己写了个MATLAB版本: 可以看到还是非常酷炫的&…

Linux 内核学习 2 - 用户程序如何被塞进内核进行调度?

Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。 fork里copy了父进程的信息,并激活task放到运行队列,当系统发生调度并获得执行机会时开始执行,但这时还不是hello程序…

【RHEL】Vivado调用VCS+Verdi联合仿真报错解决

问题描述 在使用VCS Verdi仿真Vivado工程时,点击行为仿真按钮进度条窗口消失后,Verdi窗口并未出现,查看消息报错如下: vcs: line 34205: 119837 Segmentation fault (core dumped) ${TOOL_HOME}/bin/cfs_ident_exec -f ${X…

vulnhub靶场之DC-7

一.环境搭建 1.靶场描述 DC-7 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. While this isnt an overly technical challenge, it isnt exactly easy. While its kind of a logical progression …

7个向量数据库对比:Milvus、Pinecone、Vespa、Weaviate、Vald、GSI 和 Qdrant

本文简要总结了当今市场上正在积极开发的7个向量数据库,Milvus、Pinecone、Vespa、Weaviate、Vald、GSI 和 Qdrant 的详细比较。 我们已经接近在搜索引擎体验的基础层面上涉及机器学习:在多维多模态空间中编码对象。这与传统的关键字查找不同&#xff08…

Android Studio个性化修改

Android Studio原始界面看着也太无趣了叭,话不多说跟步骤走就可以。 1.更改Android Studio主题及背景 1.背景修改 File->Settings->Plugins,搜索Sexy Editor 重启后,左侧边栏出现Other Settings选项,点击SexyEditor进行背…

K8S后渗透横向节点与持久化隐蔽方式探索

前言 通常在红蓝对抗中,我们可能会通过各种方法如弱口令、sql注入、web应用漏洞导致的RCE等方法获得服务器的权限;在当前云原生迅猛发展的时代,这台服务器很可能是一个容器,在后续的后渗透由传统的提权变为容器逃逸,内…

在程序中链接静态库 和 动态库

9. 链接库 在编写程序的过程中,可能会用到一些系统提供的动态库或者自己制作出的动态库 或者静态库文件,cmake中也为我们提供了相关的加载动态库的命令hehedalinux:~/Linux/loveDBTeacher-v3$ tree . ├── CMakeLists.txt ├── include │ └── …

Java合并两个有序链表

思路: 创建一个临时的节点,命名傀儡节点,可以理解成临时的头节点,newHead,list1和list2的两两元素比较,小的连接newHead(升序)newHead的路径(蓝色)就是连接后…

MySQL 基于 GTID 主从复制

GTID 定义 GTID 是 MySQL 事务标识,为每一个提交的事务都生成一个标识,并且是全局唯一的,这个特性是从 MySQL5.6 引进的。 组成 GTID 是由 UUID TID,UUID 是MySQL的唯一标识,每个MySQL实例之间都是不同的。TID是代表…

Servlet-执行流程生命周期

一、思考 在上一篇文章Servlet基本概念中,我们抛出了一个问题:我们定义一个类实现了Servlet接口后,是谁创建了这个类的对象呢,又是谁调用了类中的service方法呢?本篇我们将介绍Servlet的执行流程。 二、执行流程 根…

Dreamweaver CS 操作

服务器 在Windows 10中添加IIS 可以将自己的电脑设置为服务器,在Windows 10中添加IIS的步骤如下: 在开始按钮上点击右键,选择“控制面板”。从控制面板选择“程序”。然后选择“启用或关闭Windows功能”。在弹出的对话框中,找到…

【华为OD机试真题2023CD卷 JAVAJS】查找一个有向网络的头节点和尾节点

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 查找一个有向网络的头节点和尾节点 知识点图DFS搜索 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 给定一个有向图,图中可能包含有环,图使用二维矩阵表示,每一行的第一列表示起始节点,第二列表示终止节…

Error: Failed to download template from registry: fetch failed

第一次构建Nuxt项目时,出现在这样的错误!!! 如果你也是这样得错误,修改hosts也没用。我试了 是因为你的npm安装了其他镜像源, 这个时候你就需要手动下载了: web端访问: https://ra…

x-cmd pkg | csview - 美观且高性能的 csv 数据查看工具

目录 介绍首次用户功能特点类似工具与竞品进一步阅读 介绍 csview 是一个用于在命令行中查看 CSV 文件的工具,采用 Rust 语言编写的,支持中日韩/表情符号。它允许用户在终端中以表格形式查看 CSV 数据,可以对数据进行排序、过滤、搜索等操作…

牛仔行头目标检测竞赛 李沐老师Kaggle(有代码有注释)

一、比赛地址 CowBoy Outfits Detection | Kaggle 二、数据介绍 这次比赛的数据集一共有4879个image,需要自己划分训练集和验证集。annotation的格式是json,因此如果用yolo系列的算法会涉及到json2txt这一步。当然如果不用yolo系列的就不要这段代码了。…

PyTorch Tutorial

本文作为博客“Transformer - Attention is all you need 论文阅读”的补充内容,阅读的内容来自于 https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html#recommended-preparation 建议的准备流程。 Deep Learning with PyTorch: …

java实现局域网内视频投屏播放(五)视频搜索和投屏自动切换下一个

代码链接 这次对ui做了一些调整,整体分成了5个类别分别为 搜索设备播放任务已下载视频列表视频搜索下载任务列表 视频搜索 搜索 点击搜索后,会从执行所有VideoResolver实现类的search方法,将搜索到的结果汇总到一起,根据视频的…

Python爬虫---scrapy shell 调试

Scrapy shell是Scrapy提供的一个交互式shell工具,它可以帮助我们进行爬虫的开发和调试。可以使用它来测试xpath或css表达式,查看它们是如何工作的,以及它们从你试图抓取的网页中提取的数据。它允许你在编写spider时交互地测试表达式&#xff…

set -e的作用

今天看人家代码看到一个很有意思的命令 后面我搜索了一下,感觉还是很好用的 set -e 是一个调试用的好东西 比如test.sh echo "执行第一个命令" cd /aaa/bbb echo "执行第二个命令"结果如下 可以看到第二个命令是执行了,虽然我的第…