NO.06 自定义映射resultMap
1、前言
在之前的博客中,实体类的属性名和数据库表的字段名是一致的,因此能正确地查询出所需要的数据。当实体类的属性名与数据库表的字段名不一致时,会导致查询出来的数据为空指针。要解决这个问题就需要使用resultMap自定义映射。
使用的表分别为:t_minister、t_dutie,结构如下:


使用的实体类分别为:Minister类
public class Minister {private Integer id;private String ministerName;private String age;private char gender;private Integer ministerDutie;private Dutie dutie;public Minister() {}public Minister(Integer id, String ministerName, String age, char gender, Integer ministerDutie) {this.id = id;this.ministerName = ministerName;this.age = age;this.gender = gender;this.ministerDutie = ministerDutie;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getMinisterName() {return ministerName;}public void setMinisterName(String ministerName) {this.ministerName = ministerName;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}public Integer getMinisterDutie() {return ministerDutie;}public void setMinisterDutie(Integer ministerDutie) {this.ministerDutie = ministerDutie;}@Overridepublic String toString() {return "Minister{" +"id=" + id +", ministerName='" + ministerName + '\'' +", age='" + age + '\'' +", gender=" + gender +", ministerDutie='" + ministerDutie + '\'' +", dutie=" + dutie +'}';}
}
Dutie类
public class Dutie {private Integer dutieId;private String dutieName;public Dutie() {}public Dutie(Integer dutieId, String dutieName) {this.dutieId = dutieId;this.dutieName = dutieName;}public Integer getDutieId() {return dutieId;}public void setDutieId(Integer dutieId) {this.dutieId = dutieId;}public String getDutieName() {return dutieName;}public void setDutieName(String dutieName) {this.dutieName = dutieName;}@Overridepublic String toString() {return "Dutie{" +"dutieId=" + dutieId +", dutieName='" + dutieName + '\'' +'}';}
}
2、resultMap处理字段和属性的映射关系
对于查询操作,若字段名和实体类中的属性名一致时,可以通过resultType指定结果类型;若字段名和实体类中的属性名不一致,则通过resultMap设置自定义映射。
若字段名和实体类中的属性名不一致,但是字段名符合数据库的规则(使用_),实体类中的属性 名符合Java的规则(使用驼峰),此时也可通过以下两种方式处理字段名和实体类中的属性的映射关系。
2.1 通过resultMap为字段起别名的方式,保证和实体类中的属性名保持一致。
在MinisterMapper接口中声明方法getMalMinisterByVague(@Param("gender") String gender),该方法的返回值类型为List集合,List集合中存储Minister类型的数据,采用@Param注解的方式获取参数。
//采用模糊查询,查找性别为男的人员List<Minister> getMalMinisterByVague(@Param("gender") String gender);
在映射文件中实现Sql语句,采用resultMap自定义映射。通过resultMap的value值匹配自定义映射resultMap中id的value值。
<!-- List<Minister> getMalMinisterByVague(@Param("gender") String gender);--><select id="getMalMinisterByVague" resultMap="MinisterMaperr">select *from t_minister where gender like '%${gender}%'</select>
对于自定义映射resultMap标签,resultMap:设置自定义映射
属性: id:表示自定义映射的唯一标识 type:查询的数据要映射的实体类的类型
子标签: id:设置主键的映射关系 result:设置普通字段的映射关系
子标签中的属性: property:实体类的属性名 column:表的字段名
<resultMap id="MinisterMaperr" type="Minister"><id property="id" column="id"></id><result property="ministerName" column="minister_name"></result><result property="age" column="age"></result><result property="ministerDutie" column="minister_dutie"></result></resultMap>
完整的映射文件:
<!-- List<Minister> getMalMinisterByVague(@Param("gender") String gender);--><select id="getMalMinisterByVague" resultMap="MinisterMaperr">select *from t_minister where gender like '%${gender}%'</select><resultMap id="MinisterMaperr" type="Minister"><id property="id" column="id"></id><result property="ministerName" column="minister_name"></result><result property="age" column="age"></result><result property="ministerDutie" column="minister_dutie"></result></resultMap>
2.2在MyBatis的核心配置文件中设置一个全局配置信息mapUnderscoreToCamelCase
可以在MyBatis的核心配置文件中设置一个全局配置信息mapUnderscoreToCamelCase,可以在查询表中数据时,自动将_类型的字段名转换为驼峰。
例如:字段名user_name,设置了mapUnderscoreToCamelCase,此时字段名就会转换为 userName。
此时不需要使用resultMap自定义映射,只需要使用resultType指定结果类型即可。
在MinisterMapper接口中声明方法getMaleMinisterByProfile(@Param("gender") String gender),该方法的返回值类型为List集合,List集合中存储Minister类型的数据,采用@Param注解的方式获取参数。
//通过配置文件,使用模糊查询获得所有男性人员信息List<Minister> getMaleMinisterByProfile(@Param("gender") String gender);
在映射文件中实现Sql语句,采用resultType指定结果类型。
<!-- List<Minister> getMaleMinisterByProfile(@Param("gender") String gender);--><select id="getMaleMinisterByProfile" resultType="Minister">select *from t_minister where gender like '%${gender}%'</select>
3、 多对一映射
3.1 前置工作
在MinisterMapper类中添加一个private Dutie dutie属性,添加对应的GET和SET方法,重写toString方法。
3.2 级联方式处理映射关系
在MinisterMapper接口中声明方法getGeneralMinisterByCascade(@Param("ministerDutie") Integer ministerDutie),该方法的返回值类型为List集合,List集合中存储Minister类型的数据,采用@Param注解的方式获取参数。
//查询职称为武将的人员信息,级联方式实现多对一映射List<Minister> getGeneralMinisterByCascade(@Param("ministerDutie") Integer ministerDutie);
在映射文件中实现Sql语句,采用resultMap自定义映射。通过resultMap的value值匹配自定义映射resultMap中id的value值
<!-- List<Minister> getGeneralMinisterByCascade(@Param("ministerDutie") Integer ministerDutie);--><select id="getGeneralMinisterByCascade" resultMap="GeneralMinisterByCascade">select t_minister.*,t_dutie.* from t_minister left join t_dutie on t_minister.minister_dutie=t_dutie.dutie_id where t_minister.minister_dutie=#{ministerDutie}</select>
配置文件中property="dutie.dutieId"h和property="dutie.dutieName"中的dutie是Minister类的属性名dutie,”.“后的属性名是Dutie类中的属性名;column="dutie_id"和column="dutie_name"中的value值对应的是t_dutie表的字段名。
<resultMap id="GeneralMinisterByCascade" type="Minister"><id property="id" column="id"></id><result property="ministerName" column="minister_name"></result><result property="age" column="age"></result><result property="gender" column="gender"></result><result property="ministerDutie" column="minister_dutie"></result><result property="dutie.dutieId" column="dutie_id"></result><result property="dutie.dutieName" column="dutie_name"></result></resultMap>
完整的映射文件:
<!-- List<Minister> getGeneralMinisterByCascade(@Param("ministerDutie") Integer ministerDutie);--><select id="getGeneralMinisterByCascade" resultMap="GeneralMinisterByCascade">select t_minister.*,t_dutie.* from t_minister left join t_dutie on t_minister.minister_dutie=t_dutie.dutie_id where t_minister.minister_dutie=#{ministerDutie}</select><resultMap id="GeneralMinisterByCascade" type="Minister"><id property="id" column="id"></id><result property="ministerName" column="minister_name"></result><result property="age" column="age"></result><result property="gender" column="gender"></result><result property="ministerDutie" column="minister_dutie"></result><result property="dutie.dutieId" column="dutie_id"></result><result property="dutie.dutieName" column="dutie_name"></result></resultMap>
3.3 使用association处理映射关系
通过在映射文件配置resultMap标签中的子标签association实现多对一映射。
在MinisterMapper接口中声明方法getGeneralMinisterByDutie(@Param("ministerDutie") Integer ministerDutie),该方法的返回值类型为List集合,List集合中存储Minister类型的数据,采用@Param注解的方式获取参数。
//查询职称为武将的人员信息,实现多对一映射List<Minister> getGeneralMinisterByDutie(@Param("ministerDutie") Integer ministerDutie);
在映射文件中实现Sql语句,采用resultMap自定义映射。通过resultMap的value值匹配自定义映射resultMap中id的value值。
<!-- List<Minister> getGeneralMinisterByDutie(@Param("ministerDutie") Integer ministerDutie);--><select id="getGeneralMinisterByDutie" resultMap="GeneralMinisterByDutie">select *from t_minister where minister_dutie=#{ministerDutie}</select>
对于自定义映射resultMap标签中的子标签association属性:
property:实体类的属性名 javaType:设置property对象对应的实体类类型
association标签中的子标签属性:
property:javaType实体类的属性名 column:javaType实体类对应表的字段名
<resultMap id="GeneralMinisterByDutie" type="Minister"><id property="id" column="id"></id><result property="ministerName" column="minister_name"></result><result property="age" column="age"></result><result property="gender" column="gender"></result><result property="ministerDutie" column="minister_dutie"></result><association property="dutie" javaType="Dutie"><id property="dutieId" column="dutie_id"></id><result property="dutieName" column="dutie_name"></result></association></resultMap>
完整的映射文件:
<!-- List<Minister> getGeneralMinisterByDutie(@Param("ministerDutie") Integer ministerDutie);--><select id="getGeneralMinisterByDutie" resultMap="GeneralMinisterByDutie">select *from t_minister where minister_dutie=#{ministerDutie}</select><resultMap id="GeneralMinisterByDutie" type="Minister"><id property="id" column="id"></id><result property="ministerName" column="minister_name"></result><result property="age" column="age"></result><result property="gender" column="gender"></result><result property="ministerDutie" column="minister_dutie"></result><association property="dutie" javaType="Dutie"><id property="dutieId" column="dutie_id"></id><result property="dutieName" column="dutie_name"></result></association></resultMap>
3.4 分步查询
目标:使用分步查询获取人员的信息,再通过人员的minister_dutie的属性值获取人员的部门信息。
分步查询的实质就是执行两条Sql语句,在MinisterMapper的映射文件中使用分步查询之前需要实现DutieMapper接口中部门信息的查询方法。
下面是实现DutieMapper接口中部门信息的查询方法。
在DutieMapper接口中声明getDutieByDutieId(@Param("dutieId") Integer dutieId)方法,该方法的返回值类型为Dutie类型,采用@Param注解的方式获取参数值。
//通过dutieId查询人员的部门信息,分步查询第二步Dutie getDutieByDutieId(@Param("dutieId") Integer dutieId);
在对应的映射文件中实现Sql语句,采用resultMap自定义映射的方式指定结果类型。
<!-- Dutie getDutieByDutieId(@Param("dutieId") Integer dutieId);--><select id="getDutieByDutieId" resultMap="DutieByDutieId">select *from t_dutie where dutie_id=#{dutieId}</select><resultMap id="DutieByDutieId" type="Dutie" ><id property="dutieId" column="dutie_id"></id><result property="dutieName" column="dutie_name"></result></resultMap>
下面是实现MinisterMapper接口中分步查询。
在MinisterMapper接口声明getMinisterByStep(@Param("dutieId") Integer dutieId)方法,方法的返回值为List集合,存储的数据类型为Minister类型,采用@Param注释的方法获取参数值。
//采用分步查询获取dutieId为3的人员信息,分步查询第一步List<Minister> getMinisterByStep(@Param("dutieId") Integer dutieId);
在对应的映射文件中实现Sql语句,采用resultMap自定义映射。
<!-- Minister getMinisterByStep(@Param("dutieId") Integer dutieId);--><select id="getMinisterByStep" resultMap="MinisterByStep">select *from t_minister where minister_dutie=#{dutieId}</select><resultMap id="MinisterByStep" type="Minister"><id property="id" column="id"></id><result property="ministerName" column="minister_name"></result><result property="age" column="age"></result><result property="gender" column="gender"></result><result property="ministerDutie" column="minister_dutie"></result><association property="dutie" select="com.review.mybaties.mapper.DutieMapper.getDutieByDutieId" column="minister_dutie"></association></resultMap>
上述映射文件中association标签中的property="dutie"属性的value是Minister类的属性名,select的value定位分步查询第二步的方法位置,column的属性值是实体类Minister对应表的字段名minister_dutie,也是传给第二步查询参数的值。
3.4.1 延迟加载
分步查询的优点是可以实现延迟加载,如果要开启延迟加载需要在MyBatis的核心配置文件的settings的子标签setting的name属性设置为lazyLoadingEnabled,value值为true,默认值为false关闭延迟加载;设置lazyLoadingEnabled后,还需设置aggressiveLazyLoading开启按需加载,当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载,aggressiveLazyLoading的默认值为false开启按需加载。
<settings>
<!-- 开启延迟加载--><setting name="lazyLoadingEnabled" value="true"/>
<!-- 开启按需加载--><setting name="aggressiveLazyLoading" value="false"/></settings>
对于【3.4】的操作 ,如果输出的结果不包含dutie属性,则程序仅仅执行第一步,不会执行分步查询第二步。除非输出结果包含dutie属性,程序才会执行分步查询第二步。
值得注意的是不是所有的分步加载都需要延迟加载,对于不需要延迟加载的分布操作,可以在association标签中设置fetchType属性的值,value为eager时,为立即加载,不支持延迟加载;为lazy时可以延迟加载。
如下resultMap自定义映射,分步查询支持延迟加载。
<resultMap id="MinisterByStep" type="Minister"><id property="id" column="id"></id><result property="ministerName" column="minister_name"></result><result property="age" column="age"></result><result property="gender" column="gender"></result><result property="ministerDutie" column="minister_dutie"></result><association property="dutie"
fetchType="lazy" select="com.review.mybaties.mapper.DutieMapper.getDutieByDutieId" column="minister_dutie"></association></resultMap>
4、一对多映射
4.1 前置工作
在Dutie类中添加一个private List<Minister> minister属性,添加对应的GET和SET方法,重写toString方法。
处理一对多的关系需要使用resultMap中的子标签collection,collection中的属性 ofType:设置collection标签所处理的集合属性中存储数据的类型。
4.2 级联方式处理映射关系
在DutieMapper接口中创建getAllMinisterByDutieId(@Param("dutieId") Integer dutieId)方法,方法的返回值类型是Dutie类型,采用@Param注解的方式获取参数。
//根据部门dutie_id查询该部门所有员工Dutie getAllMinisterByDutieId(@Param("dutieId") Integer dutieId);
在映射文件中实现Sql语句,采用resultMap自定义映射。
<!-- Dutie getAllMinisterByDutieId(@Param("dutieId") Integer dutieId);--><select id="getAllMinisterByDutieId" resultMap="MinisterByDutieId">select * from t_dutie d left join t_minister m on d.dutie_id=m.minister_dutie where d.dutie_id=#{dutieId}</select><resultMap id="MinisterByDutieId" type="Dutie"><id property="dutieId" column="dutie_id"></id><result property="dutieName" column="dutie_name"></result><collection property="minister" ofType="Minister" ><id property="id" column="id"></id><result property="ministerName" column="minister_name"></result><result property="age" column="age"></result><result property="gender" column="gender"></result><result property="ministerDutie" column="minister_dutie"></result></collection></resultMap>
4.3 分步查询
目标:使用分步查询查询官职信息,人员信息。
分步查询的实质就是执行两条Sql语句,在DutieMapper的映射文件中使用分步查询之前需要实现MinisterMapper接口中人员信息的查询方法。
下面是实现MinisterMapper接口中人员信息查询方法。
//根据ministerDutie查询人员信息,分步查询第二步List<Minister> getMinisterByMinisterDutie(@Param("ministerDutie") Integer ministerDutie);
在映射文件中实现Sql语句,采用resultMap自定义映射
<!-- List<Minister> getMinisterByMinisterDutie(@Param("ministerDutie") Integer ministerDutie);--><select id="getMinisterByMinisterDutie" resultMap="MinisterMaperr">select *from t_minister where minister_dutie=#{ministerDutie}</select><resultMap id="MinisterMaperr" type="Minister"><id property="id" column="id"></id><result property="ministerName" column="minister_name"></result><result property="age" column="age"></result><result property="ministerDutie" column="minister_dutie"></result></resultMap>
下面在DutieMapper接口中声明getAllMinisterByDutieId(@Param("dutieId") Integer dutieId)方法。
//根据部门dutie_id查询该部门所有员工,分步查询第一步Dutie getAllMinisterByDutieId(@Param("dutieId") Integer dutieId);
在映射文件中实现Sql语句,标签collection表示一个集合,因此需要使用ofType属性指定集合中存储的类型
<!-- Dutie getAllMinisterByStep(@Param("dutieId") Integer dutieId);--><select id="getAllMinisterByStep" resultMap="AllMinisterByStep">select * from t_dutie where dutie_id=#{dutieId}</select><resultMap id="AllMinisterByStep" type="Dutie"><id property="dutieId" column="dutie_id"></id><result property="dutieName" column="dutie_name"></result><collection property="minister" select="com.review.mybaties.mapper.MinisterMapper.getMinisterByMinisterDutie" column="dutie_id"></collection></resultMap>
4.3.1 延迟加载
参考本篇博客的【3.4.1】
相关文章:
NO.06 自定义映射resultMap
1、前言 在之前的博客中,实体类的属性名和数据库表的字段名是一致的,因此能正确地查询出所需要的数据。当实体类的属性名与数据库表的字段名不一致时,会导致查询出来的数据为空指针。要解决这个问题就需要使用resultMap自定义映射。 使用的…...
国产精品:讯飞星火最新大模型V2.0
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…...
网络综合布线实训室方案(2023版)
综合布线实训室概述 随着智慧城市的蓬勃发展,人工智能、物联网、云计算、大数据等新兴行业也随之崛起,网络布线系统作为现代智慧城市、智慧社区、智能建筑、智能家居、智能工厂和现代服务业的基础设施和神经网络,发挥着重要作用。实践表明,网络系统故障的70%发生在布线系统,直接…...
Qt应用开发(基础篇)——文本编辑窗口 QTextEdit
一、前言 QTextEdit类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,用来显示富文本和纯文本的窗口部件。 框架类 QFramehttps://blog.csdn.net/u014491932/article/details/132188655滚屏区域基类 QAbstractScrollAreahttps://blog.csdn…...
NineData中标移动云数据库传输项目(2023)
近日,玖章算术NineData智能数据管理平台成功中标《2023年移动云数据库传输服务软件项目》,中标金额为406万。这标志着玖章算术NineData平台已成功落地顶级运营商行业,并在数据管理方面实现了大规模应用实践。 NineData中标2023移动云数据库传…...
Java面向对象三大特性之多态及综合练习
1.1 多态的形式 多态是继封装、继承之后,面向对象的第三大特性。 多态是出现在继承或者实现关系中的。 多态体现的格式: 父类类型 变量名 new 子类/实现类构造器; 变量名.方法名(); 多态的前提:有继承关系,子类对象是可以赋…...
HTTPS 握手过程
HTTPS 握手过程 HTTP 通信的缺点 通信使用明文,内容可能被窃听(重要密码泄露)不验证通信方身份,有可能遭遇伪装(跨站点请求伪造)无法证明报文的完整性,有可能已遭篡改(运营商劫持) HTTPS 握手过程 客户端发起 HTTPS 请求 用户在浏览器里…...
docker之Consul环境的部署
目录 一.Docker consul的介绍 1.1template模板(更新) 1.2registrator(自动发现) 1.3agent(代理) 二.consul的工作原理 三.Consul的特性 四.Consul的使用场景 五.搭建Consul的集群 5.1需求 5.2部署consul 5.3主服务器[192.168.40.20] 5.4client部署&…...
服务机器人,正走向星辰大海
大数据产业创新服务媒体 ——聚焦数据 改变商业 国内机器人联盟(IFR)将机器人划分为工作机器人、服务机器人、特种机器人三类。服务机器人广泛应用于餐饮场景、酒店场景,早已构成一道靓丽的风景。行业数据显示, 作为服务机器人发…...
SciencePub学术 | 计算机及交叉类重点SCIE征稿中
SciencePub学术 刊源推荐: 计算机及交叉类重点SCIE征稿中!信息如下,录满为止: 一、期刊概况: 计算机土地类重点SCIE 【期刊简介】IF:1.0-1.5,JCR4区,中科院4区; 【版面类型】正刊…...
Java面试题--SpringCloud篇
一、Spring Cloud 1. 什么是微服务架构? 微服务架构就是将单体的应用程序分成多 个应用程序,这多个应用程序就成为微服 务,每个微服务运行在自己的进程中,并 使用轻量级的机制通信 这些服务围绕业务能力来分,并通过自…...
【linux】常用的互斥手段及实例简述
文章目录 10. 原子变量(atomic_t)20. 自旋锁(spinlock_t)21. 读写锁(rwlock_t)22. 顺序锁(seqlock_t) 10. 原子变量(atomic_t) 头文件 #include <linux/types.h> // -> <linuc/atomic.h> // -> <asm-generic/atomic64.h>结构体 /* 32bit */ typedef …...
STM32 F103C8T6学习笔记12:红外遥控—红外解码-位带操作
今日学习一下红外遥控的解码使用,红外遥控在日常生活必不可少,它的解码与使用也是学习单片机的一个小过程,我们将通过实践来实现它。 文章提供源码、测试工程下载、测试效果图。 目录 红外遥控原理: 红外遥控特点: …...
linux 环境收集core文件步骤
Linux环境下进程发生异常而挂掉,通常很难查找原因,但是一般Linux内核给我们提供的核心文件,记录了进程在崩溃时候的信息,在C语言类的大型项目中,有助于深入定位。其配置流程如下: 1 查看生成core文件开关是…...
Git企业开发控制理论和实操-从入门到深入(一)|为什么需要Git|Git的安装
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/cate…...
上篇——税收大数据应用研究
财税是国家治理的基础和重要支柱,税收是国家治理体系的重要组成部分。我们如何利用税收数据深入挖掘包含的数据价值,在进行数据分析,提升税收治理效能,推进税收现代化。 1. 定义与特点 对于“大数据”(Big data&#…...
疲劳驾驶检测和识别4:C++实现疲劳驾驶检测和识别(含源码,可实时检测)
疲劳驾驶检测和识别4:C实现疲劳驾驶检测和识别(含源码,可实时检测) 目录 疲劳驾驶检测和识别4:C实现疲劳驾驶检测和识别(含源码,可实时检测) 1.疲劳驾驶检测和识别方法 2.人脸检测方法 3.疲劳驾驶识别模型(Python) …...
Android WakefulBroadcastReceiver的使用
WakefulBroadcastReceiver 是一种特殊类型的广播接收器,为应用创建和管理 PARTIAL_WAKE_LOCK 。 简单来说, WakefulBroadcastReceiver 是持有系统唤醒锁的 BroadcastReceiver ,用于执行需要保持CPU运转的场景。 注册 注册 Receiver &#…...
python知识:什么是字符编码?
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 我们的MySQL使用latin1的默认字符集, 也就是说,对汉字字段直接使用GBK内码的编码进行存储, 当需要对一些有汉字的字段进行拼音排序时(特别涉及到类似于名字这样的字段时…...
Vue2中使用Pinia
Vue2中使用Pinia 1.初始化配置 # main.jsimport Vue from vue import App from ./App.vue import pinia from ./stores/index import { PiniaVuePlugin } from piniaVue.use(PiniaVuePlugin)new Vue({render: h > h(App),pinia, }).$mount(#app)2.模块化开发 新建stores文…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
