Mybatis 1对1的关联映射结果集

2023-12-05

在MyBatis中, ResultMap 被用于详细地描述如何从数据库的结果集映射到Java对象。这对于处理复杂的SQL查询和关联表格非常有用,因为它提供了一种灵活的方式来处理数据库列和Java对象属性之间的不匹配,以及数据嵌套。

ResultMap的基本元素

  • <id> :用来指定类的属性名,它对应表的主键列。MyBatis将使用这个作为对象的标识符。
  • <result> :用于指定一个非主键的字段映射。它将表的列映射到Java对象的属性上。
  • <association> :用于对象的关联映射,主要用于一对一的关系。例如,一个员工只属于一个部门。
  • <collection> :用于集合的映射,主要用于一对多的关系。例如,一个部门有多个员工。

解释 <association> 标签

<association> 元素在 ResultMap 中表示一个关联的对象,通常是多对一的关系。在您提供的例子中, <association> 应该是用于将员工对象( Emp )与其所属部门的对象( Dept )关联起来。

让我们分解这个 <association> 标签:

  • property :这是Java对象中的属性名,它将保存关联对象的实例。
  • javaType :关联对象的Java类型。
  • column :这是传递给关联查询的参数值的列名,在这个例子中应该是员工表中的部门编号。
  • select :这个属性指定了获取关联对象的查询的id。这意味着MyBatis将使用这个查询来填充 property 指定的对象属性。

实际应用

xmlCopy code<!-- 员工的ResultMap,包括其关联的部门 -->
<resultMap id="empMap" type="Emp">
    <id property="id" column="emp_id"/>
    <result property="name" column="emp_name"/>
    <result property="job" column="emp_job"/>
    <!-- ...其他员工属性的映射... -->

    <!-- 定义如何加载关联的部门对象 -->
    <association property="dept" javaType="Dept" select="selectDeptByEmpId" column="dept_id"/>
</resultMap>

<!-- 选择部门的查询 -->
<select id="selectDeptByEmpId" resultType="Dept">
    SELECT * FROM dept WHERE dept_id = #{deptId}
</select>

<!-- 查询特定员工及其关联的部门 -->
<select id="findEmpByEmpNo" parameterType="int" resultMap="empMap">
    SELECT * FROM emp WHERE emp_no = #{empNo}
</select>

在这个例子中:

  1. 当调用 findEmpByEmpNo 查询时,MyBatis会执行查询并将结果集映射到 Emp 对象。
  2. 对于 Emp 对象中的 dept 属性,MyBatis将查找 selectDeptByEmpId 查询。
  3. MyBatis将 dept_id 列的值作为参数传递给 selectDeptByEmpId 查询,获取相应的 Dept 对象。
  4. 最后,MyBatis会把查询到的 Dept 对象设置到 Emp 对象的 dept 属性中。

这种方式允许延迟加载关联对象,因为 select 查询可以在需要的时候才执行,而不是在原始查询执行时立即加载,这可以提高性能并减少不必要的数据库访问。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis 1对1的关联映射结果集 的相关文章

  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • 来自十六进制代码的 Apache POI XSSFColor

    我想将单元格的前景色设置为十六进制代码中的给定颜色 例如 当我尝试将其设置为红色时 style setFillForegroundColor new XSSFColor Color decode FF0000 getIndexed 无论我在
  • Spring Security SAML2 使用 G Suite 作为 Idp

    我正在尝试使用 Spring Security 5 3 3 RELEASE 来处理 Spring Boot 应用程序中的 SAML2 身份验证 Spring Boot 应用程序将成为 SP G Suite 将成为 IDP 在我的 Maven
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 需要使用 joda 进行灵活的日期时间转换

    我想使用 joda 解析电子邮件中的日期时间字符串 不幸的是我得到了各种不同的格式 例如 Wed 19 Jan 2011 12 52 31 0600 Wed 19 Jan 2011 10 15 34 0800 PST Wed 19 Jan
  • 是否可以通过编程方式查找 logback 日志文件?

    自动附加日志文件以支持电子邮件会很有用 我可以以编程方式设置路径 如以编程方式设置 Logback Appender 路径 https stackoverflow com questions 3803184 setting logback
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • React 笔记 jsx

    严格约定 React 组件必须以 大写字母开头 而 HTML 标签则必须是小写字母 React JSX JSX 是由 React 推广的 JavaScript 语法扩展 用于表达组件的 特殊语法的 js 函数 要求标签必须闭合 返回的组件必
  • 判断是否是已知的CMS或者框架

    判断是否是已知的CMS或者框架 搜索通用漏洞 打开kali进行搜索有没有通用的漏洞 搜索disscuz漏洞 searchsploit diss 收集更多信息 Google baidu已知的漏洞 验证查找常用的POC 判断是否为已知的CMS收
  • 马斯克没继续的工作,我帮他继续下去

    还记得当初自己为什么选择计算机 埃隆 马斯克的第一份工作是在加拿大开始的 17岁时 他来到加拿大 但他的寻亲不遇 为了生存 他不得不打各种零工 包括在农场中种蔬菜和打扫粮仓 以及在木材厂锅炉房烧锅炉 后来 他在加拿大读大学时 开始在彼得银行
  • 【Shell部署脚本】更换源

    bin bash 异常捕捉 set e 判断权限 id u gt 0 echo Error 无法操作 权限不够 exit 1 备份文件 cp etc apt sources list etc apt sources list bak 阿里源
  • 保护你的数据:深入了解安全测试!

    安全测试是一种非功能性测试 与功能测试不同 功能测试关注的是软件的功能是否正常工作 软件做什么 非功能测试关注的是应用程序是否被正确设计和配置 安全测试的主要目标 识别资产 需要保护的东西 如软件应用程序和计算基础设施 识别威胁和漏洞 可能
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • 编译报错问题汇总

    1 error undefined reference to dlsym solution target link libraries target lpthread ldl https www cnblogs com midnightca
  • termius 好用吗?

    termius 好用吗 我现在接触过的 1 xshell 第一次接触shell 需要付费 2 mobaxterm 感觉还行 需要付费 3 termius 没用过 需要付费 4 MobaXterm 支持SSH跳板 Termius是一款跨平台的
  • unity3d 自定义的图片无法放入source image中

    须将图片的texture type改为 sprite
  • Google Guava 数学工具使用详解

    文章目录 数学 数值运算 取整 范围值比较 其他 数学 在 Guava 中 数学 Math 模块提供了一些常用的数学运算功能 包括数值运算 取整 范围值比较等 下面详细介绍一些 Guava 数学运算的使用方法和示例 数值运算 In
  • 【传输线开路和短路故障】带有集总元件的非对称传输线扩频时域反射测量(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章讲解
  • 【单载波调制方案】正交时序多路复用调制:分析和低复杂度接收机设计(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文献下载
  • 网络安全工程师必用的6个渗透工具,专业工具渗透工作更好做

    网络安全工程师必用的6个渗透工具 专业工具渗透工作更好做 渗透测试是通过模拟恶意黑客的攻击方法 来评估计算机网络系统安全的一种评估方法 同时 网络所有者根据渗透人员提供的渗透测试报告 可以清晰知晓系统中存在的安全隐患和问题 在这些过程中除了
  • 【用于OCT体积的散斑噪声降低】光学相干层析成像自适应复合散斑降噪滤波器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章
  • 安全测试工具,自动发现网站所有URL!

    作为一个安全测试人员来说 首先要拿到网站所有url 然后根据拿到的url进行渗透测试进行漏洞挖掘 本文给大家介绍的是如何拿到一个网站所有的url 深度爬取层级控制 现在我也找了很多测试的朋友 做了一个分享技术的交流群 共享了很多我们收集的技
  • 金融级漏洞挖掘思路总结

    金融级漏洞挖掘思路总结 总结一下思路吧 一些有意思的姿势 或许对大家都有一些帮助 入职第一天 进了渗透组 拿到了目标 此目标经过了5次漏洞挖掘 公司一堆大佬 客户要求继续往下挖 老板提出需求 必须要有一个高危 2个中危 低危不要 了解到次项
  • 搭建若依框架完成医疗项目 ——业务流程及页面展示

    目录 一 搭建若依项目 1 1 快速了解 1 1 1 技术选型 1 1 2 内置功能 1 2 环境部署 二 医疗项目业务 2 1 门诊模块 2 2 住院模块 2 3 药房药库 2 4 表设计 三 项目展示 3 1 项目背景 3 2 门诊功能
  • 推荐一款自动向hackerone发送漏洞报告的扫描器

    推荐一款自动向hackerone发送漏洞报告的扫描器 自从阿浪写了那个工具 总感觉没有web页面就是没有灵魂 然后在GitHub闲逛的时候 发现了这一款工具 用了一个多月 效果还行 可以平替 唯一的缺点就是搭建起来有些困难 需要修改文件来达
  • Google Guava 反射工具使用详解

    文章目录 反射 类操作 方法操作 字段操作 获取注解 反射 在 Guava 中 反射 Reflection 模块提供了一些用于简化反射操作的工具类和方法 通过 Guava 的反射模块 您可以方便地进行类 方法 字段的操作 获取注解信息等 下
  • Mybatis 1对1的关联映射结果集

    在MyBatis中 ResultMap 被用于详细地描述如何从数据库的结果集映射到Java对象 这对于处理复杂的SQL查询和关联表格非常有用 因为它提供了一种灵活的方式来处理数据库列和Java对象属性之间的不匹配 以及数据嵌套 Result