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文…...
Docker关于下载,镜像配置,容器启动,停止,查看等基础操作
系列文章目录 文章目录 系列文章目录前言一、安装Docker并配置镜像加速器二、下载系统镜像(Ubuntu、 centos)三、基于下载的镜像创建两个容器 (容器名一个为自己名字全拼,一个为首名字字母)四、容器的启动、 停止及重启…...
穿越网络迷雾的神奇通道 - WebSocket详解
WebSocket,作为一项前端技术,已经成为现代Web应用不可或缺的一部分。本文将深入解析WebSocket,介绍其工作原理和用途,并通过简单的代码示例,让你对这个神奇的网络通信协议有更深入的了解。 WebSocket是什么࿱…...
无脑入门pytorch系列(五)—— nn.Dropout
本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思…...
Python土力学与基础工程计算.PDF-压水试验
Python 求解代码如下: 1. import math 2. 3. # 输入参数 4. L 2.0 # 试验段长度,m 5. Q 120.0 # 第三阶段计算流量,L/min 6. p 1.5 # 第三阶段试验段压力,MPa 7. r0 0.05 # 钻孔半径,m 8. 9. # 计算透…...
Linux入门
一、安装相关软件 1.下载vmware (很容易下载,搜一下官网 ) 在cmd敲入 ncpa.cpl ,查看是否有vmware 2.下载centos 下面是镜像源网站,当然你可以选择其他的镜像源,像清华镜像源和阿里镜像源。 Index of /centos/7.9.2009/isos/x86_64/ | …...
适合国内用户的五款ChatGPT插件
众所周知使用ChatGPT3.5需要使用魔法且不稳定,订阅ChatGPT4.0每月需要支付20美元,并且使用次数有限制。对于那些不想每年花费240美元(超过1500元人民币)来使用GPT4.0的朋友们来说,还有别的办法吗? 答案是&…...
Dubbo Spring Boot Starter 开发微服务应用
环境要求 系统:Windows、Linux、MacOS JDK 8 及以上(推荐使用 JDK17) Git IntelliJ IDEA(可选) Docker (可选) 项目介绍 在本任务中,将分为 3 个子模块进行独立开发ÿ…...
linux中互斥锁,自旋锁,条件变量,信号量,与freeRTOS中的消息队列,信号量,互斥量,事件的区别
RTOS 对于目前主流的RTOS的任务,大部分都属于并发的线程。 因为MCU上的资源每个任务都是共享的,可以认为是单进程多线程模型。 【freertos】003-任务基础知识 在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式,但是如…...
安装docker服务,配置镜像加速器
文章目录 1.安装docker服务,配置镜像加速器2.下载系统镜像(Ubuntu、 centos)3.基于下载的镜像创建两个容器 (容器名一个为自己名字全拼,一个为首名字字母)4.容器的启动、 停止及重启操作5.怎么查看正在运行…...
CF 896 C Willem, Chtholly and Seniorious(珂朵莉树模板)
CF 896 C. Willem, Chtholly and Seniorious(珂朵莉树模板) Problem - C - Codeforces 大意:给出一个区间 , 要求进行四种操作 , 区间加 , 区间第k大 , 区间推平 , 区间求和。 珂朵莉树模板题 ÿ…...
影响网站打开速度/百度投放广告怎么收费
在5月23日举行的云栖大会?成都峰会上,阿里云联合思科、SAP、Informatica、NetApp、中标软件、用友畅捷通、泛微、Fortinet、联想云等国内外知名软件企业共同开启云市场软件品牌馆,并推出商业软件15天免费试用计划,希望带动100万中小企业实现…...
合肥做网站公司哪家好/高端网站定制
之前博主已将讲过了使用链表对栈的这种结构的基本操作,同时也将数组对栈的基本操作的代码附上网址,以及对栈的应用已经提过。今天我们来看,使用链表对队列这种数据结构的操作 队列 队列:列是一种特殊的线性表,特殊之处…...
哪里有做网站公司/seo怎么学
爱情没有如果很多人喜欢给爱情做假设。 他说,如果你可以温柔点,我可以更爱你,不会轻易放弃你。 她说,如果你可以体贴点,我可以更珍惜你,我也不会离开你。 但,终究在一个时间的定格中交错走开。 …...
菏泽做网站多少钱/属于网络营销的特点是
Tomcat版本问题,servlet乱码问题 我在学习的时候,老师用的是Tomcat1.7版本,在jsp发送get请求的时候,Servlet中还要对get请求传递过来的参数进行解码编码,因为tomcat1.7版本之前的内部编码为ISO8859-1,然而在…...
进一步优化供给推动消费平稳增长/北京网站seowyhseo
为什么80%的码农都做不了架构师?>>> 一、切换到系统数据库 /*****切换数据库*****/ use master go -- 批处理 二、先检测数据库中是否已经存在需要创建的表 if exists /*****指定位置新建文件夹*****/ exec xp_cmdshell mkdir E:\222,no_output -- 调用…...
网易云外链wordpress/百度关键词排名推广工具
一、简介说明 1.关于VS Code开发工具,安装和配置,更多可以参考以前文章 2.关于Vue.js,Vue是一个优秀的渐进式前端框架,不仅易于上手,还便于与第三方库或既有项目整合。 3.关于Vue的使用方式有两种,第一种…...