myBatis框架中resultMap的简单使用

     MyBatis中的ResultMap是用来映射SQL查询结果集和Java对象之间关系的配置。通过ResultMap,我们可以定义如何将查询结果中的列映射到Java对象的属性上。

ResultMap包含了多个ResultMapping,每个ResultMapping定义了一个列与属性之间的映射关系。我们可以指定列名、属性名、Java类型等信息来完成映射。

使用ResultMap的好处是可以更灵活地处理复杂的查询结果集,包括一对一、一对多、多对一等关联关系。通过ResultMap,我们可以将多个查询结果合并到一个对象中,或者将查询结果分散到多个对象中。

在MyBatis中,我们可以通过XML配置文件或注解来定义ResultMap。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="www.com.baidu.mapper.StuMapper"><resultMap id="stuMap" type="www.com.baidu.pojo.Stu" autoMapping="true"><collection property="motions" ofType="www.com.baidu.pojo.Motion" autoMapping="true" select="getStuMotion" column="sid"></collection></resultMap><select id="getStuMotion" resultType="www.com.baidu.pojo.Motion">select m.* from record r,motion m where r.mid=m.mid and r.sid= #{sid}</select><select id="list" resultMap="stuMap" >select * from stu</select></mapper>

   以上代码是一个 MyBatis 的复杂查询示例,主要涉及到了 ResultMap 中的 collection 和 select 标签。

     首先,我们定义了一个名为 "stuMap" 的 ResultMap,它的类型是 Stu 类。在 "stuMap" 中,我们使用了 collection 标签来处理一对多关系。具体来说,我们将 Motion 对象集合映射到了 Stu 对象中的 motions 属性上。collection 标签需要设置 property 属性来指定 Java 对象中的属性名称,ofType 属性来指定集合元素的类型。

        在 collection 标签内部,我们使用了 select 标签来指定获取 Motion 对象集合的 SQL 语句。select 标签需要设置 id 属性来指定 SQL 语句的唯一标识,resultType 属性来指定 SQL 查询结果的返回类型。

       在这个示例中,我们通过查询 record 表和 motion 表,获取了与指定学生 sid 相关的运动信息集合。最后,我们通过 list 标签指定查询 stu 表的 SQL 语句,并将查询结果映射到 "stuMap" ResultMap 中。

    此外,在 "stuMap" 中,我们使用了 autoMapping 属性来开启自动映射功能。当 autoMapping 属性设置为 true 时,MyBatis 会自动将列名和属性名相同的列映射到 Java 对象对应的属性上。

     总之,以上代码展示了如何使用 ResultMap 处理一对多关系,并通过 select 标签设置 SQL 查询语句来获取关联数据。同时,我们还介绍了 autoMapping 属性的使用方法。

主要是需要理解它的执行顺序 

   当后端调用 StuMapper接口类的list方法后 他就会

public interface StuMapper {List<Stu> list();
}
  1. 执行list方法,该方法会返回一个由Movie对象组成的列表。根据resultMap="movieMap",MyBatis会将查询结果映射为Movie对象。
  2. 对于每个Movie对象,MyBatis会执行<association>标签中的SQL语句,也就是select="getPerformerList"所指定的getPerformerList方法,并传入column="number"所指定的参数值(即当前Movie对象的number属性值)。该方法会返回一个由Performer对象组成的列表。
  3. MyBatis会将Performer列表映射为List<Performer>类型,然后将此列表设置为当前Movie对象的performers属性值。

     简单来讲:先执行list方法,然后因为返回的是resultMap="stuMap" 然后他就会去resultMap找"stuMap",然后执行里面的命令,命令里面有select="getStuMotion" column="sid"> 他就去查找select方法id为getStuMotion的方法,然后传参为sid字段

这样,最终的结果就是一个由Movie对象组成的列表,每个Movie对象中都包含一个List<Performer>类型的performers属性。而这些Performer对象则是通过执行getPerformerList方法获取并映射得到的。

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

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

相关文章

深度强化学习的变道策略:Harmonious Lane Changing via Deep Reinforcement Learning

偏理论&#xff0c;假设情况不易发生 摘要 多智能体强化学习的换道策略&#xff0c;不同的智能体在每一轮学习后交换策略&#xff0c;达到零和博弈。 和谐驾驶仅依赖于单个车辆有限的感知结果来平衡整体和个体效率&#xff0c;奖励机制结合个人效率和整体效率的和谐。 Ⅰ. 简…

在Excel中如何打开VBA,这里提供两种方法

想在Excel中创建或添加自己的自定义Visual Basic脚本吗&#xff1f;第一步是了解如何在Excel中打开VBA编辑器。 在易用性和整体功能方面&#xff0c;没有其他电子表格应用程序能与Excel相提并论。无论你想做什么&#xff0c;只要你能深入挖掘Excel的深层菜单&#xff0c;就有很…

正点原子imx6ull网络环境配置:开发板和电脑通过网线直连、电脑WiFi上网

1.硬件连接 开发板通过网线连接电脑。电脑连接wifi 2.VMware设置 2.1添加桥接模式和NAT模式 1&#xff09;打开vm设置 2&#xff09;设置网络适配器为桥接模式&#xff0c;不要勾选 “赋值物理网络连接状态” 3&#xff09; 添加一个网络适配器并设置成NAT模式&#xff0c;…

阿里云服务器怎么样?阿里云服务器优势、价格及常见问题

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如ECS经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云服务器网al…

vue3.2二次封装antd vue 中的Table组件,原有参数属性不变

vue3.2中的<script setup>语法 在项目中多处使用到表格组件,所以进行了一个基础的封装,主要是通过antd vue 中表格的slots配置项,通过配合插槽来进行封装自定义表格; 这次主要的一个功能是编辑之后变成input框 修改了之后变成完成发送请求重新渲染表格&#xff1a; 子…

redis数据安全(二)数据持久化 RDB

目录 一、RDB快照持久化 原理 二、RDB快照持久化配置&#xff08;redis.conf&#xff09;&#xff1a; 三、触发RDB备份&#xff1a; 1、自动备份&#xff0c;需配置备份规则&#xff1a; 2、手动执行命令备份&#xff08;save | bgsave&#xff09;&#xff1a; 3、flus…

Unity Shader 的模板测试效果

模板测试是渲染管线中逐片元操作的一环&#xff0c;它的作用是筛选出指定模板的片元&#xff0c;而不符合模板的片元会被舍弃&#xff0c;从而做到一个遮罩的效果。 以下是Unity中实践的一个效果&#xff1a; 场景中可以看出&#xff0c;熊模型和茶壶模型都在差不多的位置&am…

用原型实现Class的各项语法

本人之前对Class一直不够重视。平时对原型的使用&#xff0c;也仅限于在构造函数的prototype上挂属性。原型尚且用不着&#xff0c;更何况你Class只是原型的一颗语法糖&#xff1f; 直到公司开始了一个webgis项目&#xff0c;使用openlayers。看了下openlayers的代码&#xff0…

头像空白问题

当用户没有设置头像时&#xff0c;我们可以使用用户名第一个字来当头像 主要涉及一个截取&#xff0c;截取字符串第一个字 变量名.charAt(0) 如果变量名为null或者undefine 那么就会报错 使用可选链操作符 &#xff1f; 当前面的值为nul或undefine时&#xff0c;就不会执行…

HTML--CSS--盒子模型

在CSS模型中&#xff0c;所有元素都可以看做是一个盒子&#xff0c;这个盒子的组成部分&#xff1a; content 内容&#xff0c;文本或者图片 padding 内边距&#xff0c;定义内容到边框的距离 margin 外边距&#xff0c;定义当前元素与其他元素之间的距离 border 边框&#xff…

Android13获取存储空间大小

内部存储 1、总大小 public static long getInternalStorageSize(Context context) {File filesDir context.getFilesDir();return filesDir.getTotalSpace(); } 2、可用空间大小 public static long getFreeSpace(Context context) {File filesDir context.getFilesDir(…

第10章 通信业务

文章目录 10.1.1 通信行业1、通信行业的界定2、通信行业的特点 10.1.2 通信企业10.1.3 通信终端1、通信终端的分类2、终端发展趋势 10.2.1 通信业务的定义及分类10.2.2 基础电信业务1、第一类基础电信业务A11 固定通信业务A12 蜂窝移动通信业务A13 第一类卫星通信业务A14 第一类…

Python文本向量化入门(五):自定义中文词袋

在文本向量化中&#xff0c;使用预训练的词向量&#xff0c;例如Word2Vec、GloVe或FastText等&#xff0c;是常见的做法。这些词向量已经在大量文本数据上进行了训练&#xff0c;为我们提供了现成的词嵌入表示。然而&#xff0c;有时候我们可能希望根据特定的任务或数据集来自定…

探索设计模式的魅力:简单工厂模式

简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;其主要目的是用于创建对象的实例。这种模式通过封装创建对象的代码来降低客户代码与具体类之间的耦合度。简单工厂不是GoF&#xff08;四人帮&#xff09;设计模式之一&#xff0c…

Yii 场景场景试用model

// 1.场景使用// 模型代码 设置场景[[ip], unique, on > create],//唯一验证 $teacher_model new Course(); $teacher_model->setScenario(create);//设置使用哪个场景// 2.获取模型修改前后属性方法 // $model->getDirtyAttributes() 修改后的值getOldAttributes()前…

Vue Mixin 代码重用与逻辑共享

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

二次封装el-upload组件包含文件上传进度条、复制粘贴上传等的功能

功能 1. 支持图片上传进度条 2. 支持粘贴上传图片行为 3. 支持最大图片上传数量 4. 支持图片大小限制 5. 支持图片类型限制 6. 支持图片预览 具体实现 图片上传进度条 由于 :on-progress 钩子没触发&#xff0c;因此使用了 :on-change 钩子代替实现。进度条的值先用定时器递增…

免费电子书全集分享

分享一个在github免费电子书集合&#xff0c;如果想学编程的&#xff0c;可以收藏&#xff0c;项目地址&#xff1a;free-programming-books

行为型设计模式——中介者模式

中介者模式 中介者模式主要是将关联关系由一个中介者类统一管理维护&#xff0c;一般来说&#xff0c;同事类之间的关系是比较复杂的&#xff0c;多个同事类之间互相关联时&#xff0c;他们之间的关系会呈现为复杂的网状结构&#xff0c;这是一种过度耦合的架构&#xff0c;即…

【2024.1.17练习】C++岛屿个数/整数删除

2023蓝桥杯CB组省赛F题&#xff1a;岛屿个数 #include<iostream> #include<algorithm> #include<queue>using namespace std; typedef long long ll;const int dx[8] { 1, -1, 0, 0, -1, -1, 1, 1 }; const int dy[8] { 0, 0, 1, -1, -1, 1, -1, 1 };/* …