mybatis查询结果resultMap映射vo源码分析

news2024/12/23 19:57:57

概述

mybatis是一个常用的持久层框架;通常搭配mysql使用;
在将查询结果映射成一个复杂vo的时候,通常会用到resultMap,在其中嵌套associationcollection等操作;将一个复杂查询拆分成简单查询;

vo中的变量有时候会定义初始值,那么当mybatis中查询结果为null的时候,会覆盖这个初始值吗;

mybatis版本:3.5.10
mysql版本:8.0.32

源码分析

映射结果集入口
org.apache.ibatis.executor.resultset.ResultSetHandler

public interface ResultSetHandler {
   // 处理结果集,生成相应的结果对象集合
  <E> List<E> handleResultSets(Statement stmt) throws SQLException;
   // 处理结果集,返回游标对象
  <E> Cursor<E> handleCursorResultSets(Statement stmt) throws SQLException;
   // 处理储存过程的输出参数 
  void handleOutputParameters(CallableStatement cs) throws SQLException;
}

进入实现类
org.apache.ibatis.executor.resultset.DefaultResultSetHandler

结果集的处理方法
org.apache.ibatis.executor.resultset.DefaultResultSetHandler#handleResultSets

捞一张网图
在这里插入图片描述

一般都只会返回一个结果集,再进一步观察,里面调用的都是handleRowValues方法,在该方法中区分了嵌套ResultMap普通ResultMap(包括普通的resultType也会转成ResultMap,只是框架自动帮你转了)

org.apache.ibatis.executor.resultset.DefaultResultSetHandler#handleResultSet
org.apache.ibatis.executor.resultset.DefaultResultSetHandler#handleRowValues

handleRowValuesForSimpleResultMap:处理简单的结果集映射
handleRowValuesForNestedResultMap:处理嵌套的结果集映射(resultMap> 声明时 是否包含 association、collection、case 关键字)

在最后映射的时候都是调用了
如果开启了自动映射,对实例进行自动赋值
org.apache.ibatis.executor.resultset.DefaultResultSetHandler#applyAutomaticMappings

对用户主动声明的属性进行映射
org.apache.ibatis.executor.resultset.DefaultResultSetHandler#applyPropertyMappings

在赋值的时候可以看到图中判断;
configuration.isCallSettersOnNulls()代表配置中null值是否调用set方法,顾名思义;

我的配置中set为true;

#mybatis plus 设置
mybatis-plus:
  configuration:
    # 返回类型为Map,显示null对应的字段
    call-setters-on-nulls: true

在这里插入图片描述

所以如果返回vo中想要在查询结果为null时,不覆盖vo的值;

  1. 改配置
  2. vo字段类型改为基础类型

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

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

相关文章

「玩转 TableAgent 数据智能分析」实战数据分析演练

文章目录 前言TableAgent 功能亮点人人都是数据分析师融合创新应用的新成果 TableAgent 使用介绍登陆功能介绍申请认证 实战数据集分析一导入 CSV 文件数据发起提问TableAgent 应答结果贴切的服务推荐问题提问 实战数据集分析二分析结果分析哪个城市的未来人口最多 总结 TableA…

proteus元件合集(一)

LCD LM018L​​ 绿色的LCD寻找方法&#xff1a; 直流电压源 直流电压源寻找方法&#xff1a; 滑动变阻器 滑动变阻器寻找方法&#xff1a; 注意&#xff1a;它出来之后会自动出现那两个红色的。那是电源。

C#基础面试题集

C#基础 1. 简述值类型和引用类型有什么区别2. C# String类型比 stringBuilder 类型的优势是什么?3.面向对象的三大特点4.请简述private&#xff0c;public&#xff0c;protected&#xff0c;internal的区别5.结构体和类6.请描述Interface与抽象类之间的不同7.在类的构造函数前…

虚幻学习笔记9—C++代码变量与蓝图的通信

一、前言 C代码中通过关键字“UPROPERTY”来讲所需要的变量、方法或枚举反射暴露给蓝图&#xff0c;实现C和蓝图之间的通信。所有实现的变量都在一个名为“MyPawn1”类中&#xff0c;同时提到的蓝图是根据这个类创建的。同时这个Pawn类为场景中的默认Pawa类。 图1.1.1 文中提到…

L1-039:古风排版

题目描述 中国的古人写文字&#xff0c;是从右向左竖向排版的。本题就请你编写程序&#xff0c;把一段文字按古风排版。 输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;<100&#xff09;&#xff0c;是每一列的字符数。第二行给出一个长度不超过1000的非空字…

量化交易与人工智能:技术的交叉引发金融市场的变革

量化交易&#xff08;Quantitative Trading&#xff09;是利用数学模型和统计分析来进行投资决策的一种交易策略。而人工智能技术的快速发展为量化交易带来了全新的机遇和挑战。本文将探讨人工智能在量化交易领域的应用及其对金融市场的变革。 在传统的投资交易中&#xff0c;决…

Java连接数据库的各种细节错误(细节篇)

目录 前后端联调&#xff08;传输文件&#xff09; ClassNotFoundException: SQLException: SQL语法错误: 数据库连接问题: 驱动问题: 资源泄露: 并发问题: 超时问题: 其他库冲突: 配置问题: 网络问题: SSL/TLS问题: 数据库权限问题: 驱动不兼容: 其他未知错误…

C语言学习day02:数据结构、变量和常量、标识符

数据类型&#xff1a; 常量和变量以及宏文件注意、占位符拓展&#xff1a; #include<stdio.h> 宏定义常量 没有和; #define PI 3.14159圆的面积 spi * r * r 圆的周长 lpi * 2 * r int main() {常量piconst数据类型 常量名值const float pi 3.14159;在定义局部变量可以…

Kyligence 荣登甲子光年 2023 AIGC 技术应用领域最具商业潜力榜

近日&#xff0c;「2023甲子引力年终盛典致追风赶月的你」在北京成功举办。作为中国科技产业智库&#xff0c;「甲子光年」在年终盛典现场颁布多项榜单&#xff0c;旨在表彰2023年度在科技产业各细分赛道上拥有核心技术实力&#xff0c;并在商业化上取得卓越成绩的优秀科技企业…

亚马逊云科技:大语言模型的前沿探索与应用革新

导言&#xff1a; 近年来&#xff0c;随着科技的飞速发展&#xff0c;大语言模型成为人工智能领域的一颗璀璨明珠。在这个信息爆炸的时代&#xff0c;大语言模型以其强大的自学习能力和广泛的应用领域引起了广泛关注。作为亚马逊云科技的前沿技术之一&#xff0c;本文将深入探…

Python房价分析(三)支持向量机SVM分类模型

目录 1 数据预处理 1.1 房价数据介绍 1.2 数据预处理 2 SVM模型 2.1 模型概述 2.2 核函数选择 2.3 建模步骤 2.4 参数搜索过程 3模型评估 3.1 模型评估结果 3.2 混淆矩阵 3.3 绘制房价类别三分类的ROC曲线和AUC数值 3.4 模型比较 总结 往期精彩内容&#xff1a; …

进程线程。

1> 使用有名管道&#xff0c;完成两个进程的相互通信 #include <myhead.h> int main(int argc, const char *argv[]) {if(argc!5){puts("输入错误请重新输入");return -1;}pid_t pid-1;pidfork();if(pid>0){int wfd-1;if((wfdopen(argv[1],O_WRONLY))-1…

PPT插件-好用的插件-插入媒体-大珩助手

批量媒体 包含批量视频、批量音频、批量图片&#xff0c;可实现从光标所在的位置开始&#xff0c;每页插入一个视频、一个音频、一张图片&#xff0c;且图片和视频的尺寸与当前幻灯片尺寸一致 插入文本 包含黑字无底、白字红底、白字黛底、白字绿底、白字蓝底预设一键文本&am…

springboot房屋房产房管家中介服务系统+java-ssm

随着房地产市场的快速发展&#xff0c;中国经济飞速发展&#xff0c;社会城市化建设的脚步不断加快&#xff0c;社会城市化的规模也在不断扩大&#xff0c;房屋中介逐渐成为当今社会生活的重要部分&#xff0c;房屋中介的市场竞争也日益加剧&#xff0c;房屋中介的管理与服务成…

linux redis-cluster ipv6方式

配置文件&#xff0c;具体字段的含义&#xff0c;可以参考其他文档。 1.单个文件的配置信息 redis_36380.conf requirepass Paas_2024port 36380tcp-backlog 511timeout 0tcp-keepalive 300daemonize yessupervised nopidfile /data/paas/apps/aicache-redis/redis_36380.p…

IOS添加三方库之后项目编译没问题安装不上

code:-402653103 将新添加的framework embe&sign 改为do not embed

深度学习基本概念

1.全连接层 全连接层就是该层的所有节点与输入节点全部相连&#xff0c;如图所 示。假设输入节点为X1&#xff0c; X 2&#xff0c; X 3&#xff0c;输出节点为 Y 1&#xff0c; Y 2&#xff0c; Y 3&#xff0c; Y 4。令 矩阵 W 代表全连接层的权重&#xff0c; W 12也就代表 …

6U CPCI测控系列可定制型测控机箱

CPCI测控系列 XM-3646 内置300WH锂智能电池超强续航能力 可选配外置电池无限续航 符合CPCI总线标准规范 内置6U 4槽CPCI背板 内置CPCI-9370控制器 可内置数采、航空总线、通讯接口等功能模块 全铝镁合金加固紧凑型设计 特殊防撞包角及硅胶把手设计 15.6高清显示屏1920x…

nodejs微信小程序+python+PHP沧州地区空气质量数据分析系统-计算机毕业设计推荐 django

本系统不仅主要实现了注册登录&#xff0c;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;城市区域管理&#xff0c;空气状况管理&#xff0c;空气质量管理&#xff0c;系统管理&#xff0c;数据爬取&#xff0c;大屏分析等功能&#xff0c;通过这些功能基本可…

vue3 echarts 各省地图展示

效果&#xff1a; 1.在src下新建utils文件夹添加各省地图的json文件&#xff08;下载各省地图的网址 DataV.GeoAtlas地理小工具系列&#xff09; 2.安装echarts npm install echarts 3.在项目文件中中引入json <template><div class"back"><div id…