执行增删改查时的结果处理

news2024/11/25 4:59:54

查询最终走到PreparedStatementHandler类的query方法,执行查询后调用DefaultResultSetHandler类的handleResultSets方法
在这里插入图片描述

1.处理返回的普通实体类
在这里插入图片描述
DefaultResultSetHandler类的handleResultSets方法
在这里插入图片描述
在这里插入图片描述
继续本类的handleResultSet方法
在这里插入图片描述
通过 handleRowValues 方法来映射 ResultSet 结果,并将并将映射的结果从 defaultResultHandler 的 ResultList 方法中取出存入 multipleResults 中,完成映射。
继续本类的handleRowValues方法
在这里插入图片描述
hasNestedResultMaps:是否由嵌套映射,一般都是resumtMap标签中含有collection标签association标签才会为true
继续本类的handleRowValuesForSimpleResultMap方法
在这里插入图片描述
该方法通过遍历结果集挨个调用 getRowValue 方法来进行结果集的映射,这里遍历映射是因为结果集可能不止一个。
如果查询的是list的话可能会有很多条
((ResultSetImpl) ((HikariProxyResultSet) ((ResultSetLogger) ((Proxy) resultSet).h).rs).delegate).rowData
在这里插入图片描述

继续本类的getRowValue方法
在这里插入图片描述
继续本类的applyAutomaticMappings方法
在这里插入图片描述
typeHandler就是将jdbc类型转换为Java类型

2.处理ResultMap
在这里插入图片描述

    <resultMap id="EmpVoMap" type="com.lzp.vhrserver.vo.EmpVo">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="name" column="name" jdbcType="VARCHAR"/>
            <result property="gender" column="gender" jdbcType="CHAR"/>
            <result property="birthday" column="birthday" jdbcType="DATE"/>
            <result property="idCard" column="idCard" jdbcType="CHAR"/>
            <result property="wedlock" column="wedlock" jdbcType="OTHER"/>
            <result property="nationId" column="nationId" jdbcType="INTEGER"/>
            <result property="nativePlace" column="nativePlace" jdbcType="VARCHAR"/>
            <result property="politicId" column="politicId" jdbcType="INTEGER"/>
            <result property="email" column="email" jdbcType="VARCHAR"/>
            <result property="phone" column="phone" jdbcType="VARCHAR"/>
            <result property="address" column="address" jdbcType="VARCHAR"/>
            <result property="departmentId" column="departmentId" jdbcType="INTEGER"/>
            <result property="jobLevelId" column="jobLevelId" jdbcType="INTEGER"/>
            <result property="posId" column="posId" jdbcType="INTEGER"/>
            <result property="engageForm" column="engageForm" jdbcType="VARCHAR"/>
            <result property="tiptopDegree" column="tiptopDegree" jdbcType="OTHER"/>
            <result property="specialty" column="specialty" jdbcType="VARCHAR"/>
            <result property="school" column="school" jdbcType="VARCHAR"/>
            <result property="beginDate" column="beginDate" jdbcType="DATE"/>
            <result property="workState" column="workState" jdbcType="OTHER"/>
            <result property="workId" column="workID" jdbcType="CHAR"/>
            <result property="contractTerm" column="contractTerm" jdbcType="DOUBLE"/>
            <result property="conversionTime" column="conversionTime" jdbcType="DATE"/>
            <result property="notWorkDate" column="notWorkDate" jdbcType="DATE"/>
            <result property="beginContract" column="beginContract" jdbcType="DATE"/>
            <result property="endContract" column="endContract" jdbcType="DATE"/>
            <result property="workAge" column="workAge" jdbcType="INTEGER"/>
        <association property="joblevelEntity"  javaType="com.lzp.vhrserver.entity.JoblevelEntity">
            <id property="id" column="joblevelId"></id>
            <result property="name" column="joblevelName"></result>
        </association>
        <association property="departmentEntity"  javaType="com.lzp.vhrserver.entity.DepartmentEntity">
            <id property="id" column="departmentId"></id>
            <result property="name" column="departmentName"></result>
        </association>
        <association property="positionEntity"  javaType="com.lzp.vhrserver.entity.PositionEntity">
            <id property="id" column="posId"></id>
            <result property="name" column="posName"></result>
        </association>
        <association property="politicsstatusEntity"  javaType="com.lzp.vhrserver.entity.PoliticsstatusEntity">
            <id property="id" column="politicId"></id>
            <result property="name" column="politicName"></result>
        </association>
        <association property="nationEntity"  javaType="com.lzp.vhrserver.entity.NationEntity">
            <id property="id" column="nationId"></id>
            <result property="name" column="nationName"></result>
        </association>
    </resultMap>

handleRowValues方法
在这里插入图片描述
handleRowValuesForNestedResultMap方法
在这里插入图片描述
getRowValue,重载的方法,处理嵌套映射
在这里插入图片描述
这里也是把每个result中的嵌套映射一个一个都拿到,调用applyNestedResultMappings方法。

关键类DefaultResultSetHandler,基本逻辑都是在这个类实现的。
关键类ResultSetWrapper,保存要映射的字段集合和查询出的数值的字节数组

  • **1.DefaultResultSetHandler类的handleResultSets方法,先拿到需要映射的字段集合,封装在ResultSetWrapper中,然后再获取一个resultmap类型的集合,每个resultmap保存需要映射的类型,如果有resultmap标签则会封装到resultmappings属性中,
  • 2.DefaultResultSetHandler类的handleResultSet方法,调用handleRowValues方法处理结果集放到multipleResults中,
  • 3.DefaultResultSetHandler类的handleRowValues方法,分别处理嵌套映射和非嵌套映射
  • 4.非嵌套映射,handleRowValuesForSimpleResultMap方法,遍历映射每行数据,调用getRowValue方法。没加resultmap或者resultmap中没做映射的字段调用applyAutomaticMappings方法,resultmap中映射的字段调用applyPropertyMappings方法。具体方法就是调用对应字段类型的typeHandler从字节数组中拿到数据进行转换。所有对应字段值的字节数组在ResultSetWrapper的resultset属性中。
  • 5.嵌套映射,handleRowValuesForNestedResultMap方法,遍历映射每行数据,调用重载的getRowValue方法,没加resultmap或者resultmap中没做映射的字段调用applyAutomaticMappings方法,resultmap中映射的字段调用applyPropertyMappings方法,嵌套映射的字段调用applyNestedResultMappings方法。而applyNestedResultMappings会再次调用getRowValue方法解析每行数据,逻辑和非嵌套映射相同**

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

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

相关文章

设计一个可靠的自动化测试框架需要考虑哪些问题呢?

随着软件开发的日益普及&#xff0c;自动化测试框架逐渐成为了保障软件质量的必备工具。然而&#xff0c;如何设计一个可靠的自动化测试框架并不是一件简单的事情&#xff0c;需要考虑多方面的问题。本文将从需求分析、架构设计、测试用例编写等多个角度&#xff0c;介绍设计一…

【SpringMVC】| SpringMVC拦截器

目录 一&#xff1a;SpringMVC拦截器 1. 拦截器介绍 2. HandlerInterceptor接口分析 3. 自定义拦截器实现权限验证 一&#xff1a;SpringMVC拦截器 SpringMVC 中的 Interceptor 拦截器&#xff0c;它的主要作用是拦截指定的用户请求&#xff0c;并进行相应的预处理与后处理…

C++面向对象(黑马程序员)

内存分区模型 #include<iostream> using namespace std;//栈区数据注意事项&#xff1a;不要返回局部变量的地址 //栈区的数据由编译器管理开辟和释放int* func(int b) //形参数据也会放在栈区 {b 100;int a 10; //局部变量存放在栈区&#xff0c;栈区的数据在函数执…

Qt创建项目 No suitable kits found.

最近因为要写.net6项目&#xff0c;而更新了Visual Studio&#xff0c;后来再使用Qt的时候发现不能编译了。 调整后&#xff0c;发现新建项目显示“No suitable kits found”错误。 网上也看了很多的解决方案&#xff0c;但都不得要领&#xff0c;也都没有解决。 ----------…

Java-Redis持久化之AOF操作

Java-Redis持久化之AOF操作 1.AOF(append only file)2.请你用自己的话说一说 AOF的过程?3.配置如何开启AOF操作4.AOF的优点和缺点: 1.AOF(append only file) 将我们所有的命令都记录下来保存到文件&#xff0c;恢复的时候把这个文件都执行一遍。 2.请你用自己的话说一说 AOF…

【Vue】学习笔记-全局事件总线

全局事件总线(GlobalEventBus) 一种可以在任意组件通信的方式&#xff0c;本质上就是一个对象&#xff0c;它必须满足以下条件 所有的组件对象都必须能看见他这个对象必须能够使用$ on $ emit $ off方法取绑定、触发和解绑事件 使用步骤 定义全局事件总线 //创建VUE new V…

WPF中的用户控件和自定义控件详解

总目录 文章目录 总目录一、什么是用户控件和自定义控件1 用户控件和自定义控件2 相关知识点2 用户控件和自定义控件的适用场景 二、用户控件的使用1.通过依赖属性和路由事件封装用户控件的案例2.通过依赖属性命令依赖属性封装用户控件的案例3.只对外提供属性不对外提供操作的用…

USBCAN卡和台达AS228T通信

AS228R 如图 A.把CAN卡固定上 B.接一个120欧的终端电阻 C.把来可的USBCAN卡的CANH和CANL分别接入AS228R的CANH和CANL. CAN 接口及网络拓扑 10.2.4.1 CAN 网络实体信号的定义及数据格式 CAN 信号为差分信号&#xff0c;信号电压为 CAN和 CAN-之间的电压差&#xff0c;CAN 和…

怎样删除hao123(浏览器首页被篡改了)

有时候我们打开浏览器发现首页被hao123 ,或者2345 这些浏览器给篡改了 或者打开的时候直接打开2个.这个时候想要删除它们,其他它们本身就是网页的,没有应用 在卸载的地方就不用了,它们就嵌套你的浏览器里面,打开的时候启动了他们, 下面说下方法 1 查看浏览器在什么方法下载…

第3天学习Docker-Docker部署常见应用(MySQL、Tomcat、Nginx、Redis、Centos)

前提须知&#xff1a; &#xff08;1&#xff09;搜索镜像命令 格式&#xff1a;docker search 镜像名 &#xff08;2&#xff09;设置Docker镜像加速器 详见文章&#xff1a;Docker设置ustc的镜像源&#xff08;镜像加速器&#xff09; 1、部署MySQL 拉取镜像&#xff08;这…

Radius:针对Rollup生态的Trustless Shared Sequencing层

1. 引言 前序博客&#xff1a; Rollup去中心化Rollup DecentralizationAztec 征集 Rollup Sequencer去中心化提案 Rollup中单一中心化sequencer的问题在于&#xff1a; 审查MEV extraction MEV extraction的问题不在于中心化本身&#xff0c;而在于sequencer具有操纵交易顺…

CN学术期刊《西部素质教育》简介及投稿邮箱

《西部素质教育》&#xff08;半月刊&#xff09;创刊于2015年&#xff0c;是由青海人民出版社有限责任公司主管/主办的教育类学术期刊&#xff0c;本刊恪守“追踪教育研究前沿&#xff0c;关注教育实践热点&#xff0c;探索创新教育理念&#xff0c;传播教育教学信息&#xff…

测试外包干了4年,我废了...

这是来自一位粉丝的投稿内容如下&#xff1a; 先说一下自己的个人情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某外包公司&#xff0c;干了接近4年的软件测试外包工作&#xff0c;马上2023年秋招了&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在…

JOSEF 约瑟 JZ-7Y-E/06静态中间继电器 拓展端子 接线牢固

​ JZ-7Y-E/06静态中间继电器品牌:JOSEF约瑟名称:静态中间继电器型号:JZ-7Y-E/06额定电压:6220VDC&#xff1b;6380VAC触点容量:10A/250V10A/220VDC功率消耗:≤6W JZ-7Y-E/06静态中间继电器 系列型号&#xff1a; JZ-7Y-E/60静态中间继电器&#xff1b; JZ-7J-E/60…

Spring ( 一 ) 依赖耦合

1.依赖耦合及解耦 1.1.从<<西游记>>说起 1.1.1.主角介绍 使用 Java 语言中编写一个 HouWang 猴王类 // 猴王 public class HouWang {// 成员变量private String mingZi;// 无参构造方法public HouWang() {System.out.println("石破天惊");}// 有参数构…

知识推理——TransE(知识表示、知识嵌入)

记录一下学习TransE的笔记~ 最后更新时间&#xff1a;20230512 1.要解决的问题 &#xff08;1&#xff09;以往的模型&#xff08;Bayesian clustering和energy-based&#xff09;关注于增强模型的表达能力和普遍性&#xff0c;但却增加了模型的复杂性及计算消耗。 &#xff0…

2023.05.12-给PDF文件添加目录

打开PdgCntEditorcloudshare.lanzouw.com/ijZPj03tmnle 直接把有标题的PDF拖进来&#xff0c;就可以识别生成对应的目录了之后点击保存就可以把目录写到PDF文件中了&#xff0c;非常的方便

23种设计模式之原型模式

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将23种设计模式中的原型设计模式&#xff0c;此篇文章为一天学习一个设计模式系列文章&#xff0c;后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大…

(10)Qt---项目打包

目录 项目打包 1. 设置应用图标** 2. Debug与Release模式*** 3. 动态链接库** 4. 程序打包* 5. 新版本Qt的安装与使用* 项目打包 一款正常的软件产品应该在任何的计算机中运行&#xff0c;不需要单独安装Qt的开发环境&#xff0c;因此需要把之前的项目打包成一个安装包。 1. 设…

Ctfshow [单身杯]

文章目录 web签到easyPHPescapeshellcmdescapeshellargsedawk 姻缘测试 web签到 <?php # -*- coding: utf-8 -*- # Author: h1xa # Date: 2022-03-19 12:10:55 # Last Modified by: h1xa # Last Modified time: 2022-03-19 13:27:18 # email: h1xactfer.com # link: h…