Mybatis-Plus基础学习
目录
- 第一章、快速了解mybatis-plus
- 1.1)相关概念介绍
- 1.2)为什么使用MyBatis-Plus
- 1.3)学习过程中的疑问
- 第二章、 MyBatis-Plus与SpringBoot集成
- 2.1)使用Spring Initializr创建SpringBoot项目
- 2.2)安装Lombok插件
- 2.3)准备数据库表
- 2.3)配置文件application.properties
- 2.4)pom文件添加依赖
- 第三章、使用 MyBatis-Plus提供的注解
- 3.1)常用注解介绍
- @TableName:
- @TableId:
- @TableField:
- 3.2)不常用注解
- @TableLogic:
- @EnumValue:
- @Version:
- @JsonProperty:
- 第四章、MyBatis-Plus提供的代码生成器
- 4.1)添加依赖
- 4.2)准备CodeGenerator类
- 4.3)右键运行main方法
- 第五章、MyBatis-Plus提供字段填充功能
- 5.1)插入数据库字段时通常需要带上创建时间
- 5.2)配置MetaObjectHandler开启自动填充功能
- 5.3)字段上使用@TableField
- 第六章、Basemapper和Wrapper条件构造器
- 6.1)
友情提醒: 使用文心一言AI工具参与创作
先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。有用记得关注
第一章、快速了解mybatis-plus
1.1)相关概念介绍
MyBatis是什么?
MyBatis是一个开源的Java持久层ORM框架,基于XML配置文件将SQL语句与程序代码分离,直接在XML配置文件中修改SQL语句。MyBatis内部封装了JDBC,简化了加载驱动、创建连接、创建statement等繁杂的过程,提供了数据持久化的基本功能,如SQL映射、缓存管理等。但是使用MyBatis对XML和SQL的编写规范要求较高。
ORM框架:
对象关系映射框架的简称,主要用于实现面向对象编程语言与关系型数据库之间的映射。ORM框架的核心思想是将数据库表映射成程序中的对象,将表中的记录映射成对象列表,将表的字段映射成对象的属性。
MyBatis-Plus是什么?
MyBatis-Plus是一个MyBatis的增强工具包,仅依赖Mybatis以及Mybatis-Spring,在MyBatis的基础上进行了扩展,使用注解和API的方式进行数据持久化,
1.2)为什么使用MyBatis-Plus
MyBatis-Plus的一些主要特点和功能:
损耗小无侵入性:启动就生成通用的CRUD方法损耗小。只增强MyBatis,不会对现有工程产生影响。
简化开发过程:提供了代码生成器,自动生成通用的CRUD方法,支持主键自动生成,支持Lambda表达式查询
分页插件:提供了分页查询的功能
条件构造器:提供了强大的条件构造器
可扩展性:自定义SQL语句。用户可以通过自定义MybatisSqlInjector来扩展SQL语句,也允许用户自定义Condition类来实现复杂查询。
1.3)学习过程中的疑问
这里是我学习过程中产生的几个疑问:
- 如何与springboot集成
- 代码生成器怎么用?如何一次性创建所需的dao、mapper、通用CRUDservice类。
- Mybatis-Plus提供了哪些注解给我们使用
- 如何在插入数据的同时自动插入时间
- Lambda表达式查询怎么使用
- 什么是BaseMapper
- 分页插件如何使用
- 条件构造器Wrapper是什么,怎么使用
- 如何自定义SQL语句。如何自定义Condition类来实现复杂查询
后续会一个个解决,开个专栏,出个系列文章。
第二章、 MyBatis-Plus与SpringBoot集成
2.1)使用Spring Initializr创建SpringBoot项目
①创建SpringBoot项目
教程链接:
idea快速搭建Springboot项目(一)
②setting里查看编译器。我是Jdk11
③setting里查看字符编码是否一致
④新建项目子包
项目结构如图
启动类使用@MapperScan注解扫描 Mapper 文件夹
package com.test.springboot;
org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.test.springboot.mapper")
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
2.2)安装Lombok插件
setting–>plugins–>右侧marketplace 搜索Lombok–>
点击install–>安装完了点击restartIDE
Lombok作用:提高开发效率,通过注解形式使javabean生成get、set、构造器、toString等方法
@Data
@ToString, @EqualsAndHashCode,
所有属性的@Getter, 所有non-final属性的@Setter
和@RequiredArgsConstructor的组合
@Getter / @Setter
放在类上,会对所有的非静态属性生成Getter/Setter方法,
放在属性上,会对该属性生成Getter/Setter方法。
并可以指定Getter/Setter方法的访问级别。
@ToString
生成toString方法
@EqualsAndHashCode
生成equals和hascode方法,可以指定具体使用哪些属性。
@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
生成无参构造器、部分参数构造器、全参构造器,
要重载多个构造器的时候,无法使用
2.3)准备数据库表
创建表:
CREATE TABLE `user` (`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',`name` varchar(32) DEFAULT NULL COMMENT '姓名',`age` int(11) DEFAULT NULL COMMENT '年龄',`skill` varchar(32) DEFAULT NULL COMMENT '技能',`evaluate` varchar(64) DEFAULT NULL COMMENT '评价',`fraction` bigint(11) DEFAULT NULL COMMENT '分数',PRIMARY KEY (`id`)
) ;
插入数据:
INSERT INTO `user` VALUES (1, '小明', 20, '画画', '画画高手', 89);
INSERT INTO `user` VALUES (2, '小强', 19, '游戏', '喜欢游戏', 64);
INSERT INTO `user` VALUES (3, '小张', 18, '英语', '外国人', 90);
INSERT INTO `user` VALUES (4, '小黄', 20, '体育', 'yellow', 76);
INSERT INTO `user` VALUES (5, '小白', 17, '绘画', '别龙马', 77);
INSERT INTO `user` VALUES (7, '小红', 18, 'JAVA', '码农', 59);
INSERT INTO `user` VALUES (9, '小李', 18, '睡觉', '肥宅', 60);
INSERT INTO `user` VALUES (11, '数据1', 3, '画肖像', NULL, 61);
INSERT INTO `user` VALUES (12, '数据2', 3, NULL, NULL, 61);
INSERT INTO `user` VALUES (13, '数据3', 3, NULL, NULL, 61);
2.3)配置文件application.properties
因为Spring Boot 2.1 集成了 8.0版本的jdbc驱动,这个版本的 jdbc 驱动需要添加这个后缀 ?serverTimezone=Hongkong
server.port=9001server.servlet.context-path=/001-testspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=rootmybatis-plus.mapper-locations=classpath:mapper/*.xml
2.4)pom文件添加依赖
之前的pom文件里有这个依赖的得先删了,因为Mybatis-plus的依赖包含了原先Mybaits部分
数据库版本加到pom文件的 properties标签里面,后面MySQL加依赖,版本号就是这个了
<mysql-connector-java-version>8.0.28</mysql-connector-java-version>
加mysql依赖,加Mybatis-Plus依赖,加lombok依赖
<!--mysql-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector-java-version}</version>
</dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1.tmp</version>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
第三章、使用 MyBatis-Plus提供的注解
3.1)常用注解介绍
MyBatis使用Mapper.XML文件来进行数据表映射。有resultMap、sql、insert、update、delete和select等元素。其中resultMap用于描述如何从数据库结果集中加载对象。
MyBatis-Plus可以使用XML配置进行数据表映射,也可以使用注解来映射。
下面是注解方式详细介绍:
@TableName:
@TableName("数据库的表名"):用于指定实体类对应的数据库表名。//举例
@TableName("table_user")
public class User { // ...
}
@TableId:
@TableId("主键名"):用于指定实体类中的某个属性作为数据库表的主键。
@TableId(value = "id", type = IdType.AUTO):自增
@TableId(value = "id", type = IdType.ID_WORKER_STR):分布式全局唯一ID字符串类型
@TableId(value = "id", type = IdType.INPUT):自行输入
@TableId(value = "id", type = IdType.ID_WORKER):分布式全局唯一ID 长整型类型
@TableId(value = "id", type = IdType.UUID):32位UUID字符串
@TableId(value = "id", type = IdType.NONE):无状态//举例
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField:
@TableField("字段名"):用于指定实体类中的某个属性与数据库表中的某个字段的对应关系。
@TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。
@TableField(exist = true):表示该属性为数据库表字段。
@TableField(condition = SqlCondition.LIKE):表示该属性可以模糊搜索。
@TableField(fill = FieldFill.INSERT):注解填充字段 ,生成器策略部分也可以配置!//举例
@TableField("username")
private String username;
3.2)不常用注解
@TableLogic:
@TableLogic:用于在执行删除操作时,启用或禁用级联删除功能。//举例
@TableLogic(logicType = LogicType.KEEP)
private Boolean isDeleted;
@EnumValue:
@EnumValue: 用于将枚举类型属性映射到数据库表中的字符串类型字段。//举例
public enum Gender { MALE, FEMALE;
} @TableField("gender")
@EnumValue(value = "name")
private Gender gender;
@Version:
@Version:乐观锁注解、在使用乐观锁时,还需要在 MyBatis-Plus 的配置文件
中启用乐观锁插件,并配置乐观锁的策略。这样可以保证乐观锁功能的正确性。//举例
@Version
private Integer version;
@JsonProperty:
@JsonProperty: 用于实体类的属性上,作用是重命名属性,以便在反序列化时使用不同的名称。
第四章、MyBatis-Plus提供的代码生成器
4.1)添加依赖
mybatis-plus-generator依赖和velocity-engine-core依赖和commons-lang3依赖加到pom文件里面,代码生成器会用到
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.0</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.0</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.5</version></dependency>
4.2)准备CodeGenerator类
新建一个CodeGenerator类
package com.icbc.coresd.util;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;public class CodeGenerator {public static void main(String[] args) {AutoGenerator mpg = new AutoGenerator();// 数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://xxx.xx.xxx:3306/sdtools?useUnicode=true&characterEncoding-utf-8&useSSL=false&serverTimezone=UTC");dsc.setDriverName("com.mysql.jdbc.Driver");dsc.setUsername("数据库账号");dsc.setPassword("数据库密码");mpg.setDataSource(dsc);// 全局配置GlobalConfig gc = new GlobalConfig();//代码输出的目录在java下gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java/");gc.setAuthor("作者名称");gc.setOpen(false);//每次生成代码的时候是否重置gc.setFileOverride(false);//主键自增长gc.setIdType(IdType.AUTO);gc.setDateType(DateType.ONLY_DATE);mpg.setGlobalConfig(gc);// 包配置PackageConfig pc = new PackageConfig();//在目录的哪个包下pc.setParent("com.xxxx.core");mpg.setPackageInfo(pc);// 策略配置StrategyConfig strategy = new StrategyConfig();//下划线转驼峰strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(pc.getModuleName() + "_");mpg.setStrategy(strategy);// 模板配置TemplateConfig templateConfig = new TemplateConfig();templateConfig.setXml(null);mpg.setTemplate(templateConfig);// 执行生成mpg.execute();}
}
4.3)右键运行main方法
在CodeGenerator类中配置代码生成的设置后,右键运行main方法后,Mybatis-Plus会识别这个类,并根据类中的设置生成相应代码。生成的代码包括:entity类,接口,实现类等。里面具体的配置写了注释,如果想弄懂每个配置的含义,可以把每个配置拿去查一下具体的含义。
第五章、MyBatis-Plus提供字段填充功能
5.1)插入数据库字段时通常需要带上创建时间
在设计数据库表时,通常必须有以下字段
自增ID
创建时间:createdTime
修改时间:updatedTime
创建人:createBy
修改人:updateBy
而MyBatis-Plus提供字段填充功能可以让我们轻松实现插入数据的同时,在createTime字段填充当前时间。
①确保数据库时间字段类型与实体类中的字段类型匹配
如:实体类中的字段类型为java.util.Date
则数据库的字段为TIMESTAMP
②在application.yaml文件中配置下面这些信息,允许bean定义重写,其实不写配置也行,就当拓展知识点了。
spring:main:allow-bean-definition-overriding: true
5.2)配置MetaObjectHandler开启自动填充功能
①创建一个类并实现MetaObjectHandler接口,该接口包含了insertFill和updateFill两个方法,用于指定在插入和更新操作时自动填充的字段
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createdTime", Date.class, new Date());// 其他需要插入填充的字段}@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updatedTime", Date.class, new Date());// 其他需要更新填充的字段}
}
5.3)字段上使用@TableField
实体类的相应字段上使用@TableField注解,指定需要自动填充的字段。
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("table_user")
public class user{@TableId(type = IdType.AUTO)private Long id;@TableField(value = "created_time",fill = FieldFill.INSERT)private Date createdTime;@TableField(value = "updated_time",fill = FieldFill.INSERT_UPDATE)private Date updatedTime;// 其他字段
}
配置好以后,尝试插入数据,发现created_time字段已经字段填充了当前时间
第六章、Basemapper和Wrapper条件构造器
6.1)
Lambda查询
相关文章:

Mybatis-Plus基础学习
目录 第一章、快速了解mybatis-plus1.1)相关概念介绍1.2)为什么使用MyBatis-Plus1.3)学习过程中的疑问 第二章、 MyBatis-Plus与SpringBoot集成2.1)使用Spring Initializr创建SpringBoot项目2.2)安装Lombok插件2.3&…...

C#微信公众号HIS预约挂号系统源码
微信公众号预约挂号系统、支付宝小程序预约挂号系统主要是让自费、医保患者在手机上就能实现就医全过程,实时预约挂号、自费、医保结算,同时还可以查询检查检验报告等就诊信息,真正实现了让信息“多跑路”,让群众“少跑腿”。系统…...

MySQL基础笔记(6)函数
函数:是指一段可以直接被另一段程序调用的程序或者代码~(MySQL内置) 一.字符串函数 trim不能去除中间的空格~ select concat(jsl,1325): 执行如上的代码,返回字符串"jsl1325"。 select lower(JSL); 执行如上的代码&…...

初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(2)
🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…...

Defi安全--Zunami Protocol攻击事件分析
其它相关内容可见个人主页 1 Zunami攻击事件相关信息 2023.8.13发生在Ethereum上发生的攻击,存在两个攻击交易,具体信息如下: 攻击合约地址:Contract Address 攻击合约 攻击者地址:Zunami Protocol Exploiter 攻击…...

虾皮电商 电商平台:虾皮(Shopee)东南亚领先的电子商务平台
在当今数字化时代,电子商务平台的兴起改变了人们的购物方式。虾皮(Shopee)作为东南亚地区领先的电子商务平台,为消费者提供了便捷、多样化的购物体验。由新加坡的Sea Group(前称Garena)于2015年创立&#x…...

【降龙算法】基于QT插件机制实现一个机器视觉算法小框架
机器视觉行业有各种各样的拖拉拽框架,也叫做低代码平台,例如国内海康的VisionMaster: 一个机器视觉框架需要包含各种算法模块,日志窗口,图像显示窗口等等,【降龙算法】就是做了一个入门级的机器视觉算法框…...

智能路由器 端口映射 (UPnP) Padavan内网端口映射配置方法
新版本Padavan 4.4内核的端口映射配置和老版本的不太一样,因为新版本默认是启用的 UPnP端口映射, 同时默认使用的是 IGD UPnP自动端口映射, UPnP名词解释: UPnP通用即插即用,是一组协议的统称,是一种基于TCP/IP、UDP和HTTP的分布式、开放体系ÿ…...

MR-GCN
∘ Φ \circ_Φ ∘Φ denotes a convolution Let b l o c k d i a g blockdiag blockdiag(A) be a n1n3-by-n2n3 block diagonal matrix, f o l d fold fold indicate its inverse operator diagonal degree tensor D \mathcal{D} D 作者未提供代码...
Java http 响应式请求和非响应式请求有什么区别
在Java中,HTTP的响应式请求和非响应式请求有以下区别: HTTP协议本身并不直接支持响应式请求,因为HTTP是基于请求-响应模型的。然而,可以通过使用其他技术和协议来实现响应式请求。 响应方式:响应式请求是指使用响应式编…...

CHS_06.2.1.6_2+线程的实现方式和多线程模型
CHS_06.2.1.6_2线程的实现方式和多线程模型 知识总览线程的实现方式用户级线程(User-Level Thread, ULT)内核级线程 多线程模型一对一模型多对一多对多模型 知识回顾 在上个小节中 我们学习了线程相关的一些基本概念 基础的知识 那这个小节中 我们回来看…...

k8s集群配置NodeLocal DNSCache
一、简介 当集群规模较大时,运行的服务非常多,服务之间的频繁进行大量域名解析,CoreDNS将会承受更大的压力,可能会导致如下影响: 延迟增加:有限的coredns服务在解析大量的域名时,会导致解析结果…...
Superpoint Transformer for 3D Scene Instance Segmentation
Abstract 现有的大多数方法通过扩展用于3D物体检测或3D语义分割的模型来实现3D实例分割。然而,这些非直接的方法存在两个缺点:1) 不精确的边界框或不令人满意的语义预测限制了整体3D实例分割框架的性能。2) 现有方法需要一个耗时的中间聚合步骤。为了解决这些问题,本文提出…...
adb调试软件下载 及 常用调试命令
一、软件下载 Windows版本:下载 Mac版本:下载 Linux版本:下载 二、常见调试命令 进入ADB调试 在文件路径栏输入cmd,回车,即可进入adb调试。注意:以下3条不要登录设备 shell (一)显…...

变电站综合自动化监控系统在某物流园35kV变电站中应用
摘 要:Acrel-1000变电站综合自动化系统,是我司根据电力系统自动化及无人值守的要求,总结国内外的研究和生产的先进经验,专门研制出的新一代电力监控系统。本系统具有保护、遥测、遥信、遥脉、遥调、遥控功能,可实现无人…...

技术的本质,是解决需求
分享下今日朋友圈精华内容。 很多人在初学时,走了很多弯路,一味追求热门、高性能、高复杂的芯片,或者系统,学了一堆东西,最后连个简单的功能,都实现不了。 大概是忘了,学技术的本质,…...

【刷题】leetcode 1 . 两数之和
两数之和 两数之和1 思路一 (简单突破)2 思路二 (进行优化)3 思路三 (哈希表 我还不会) 谢谢阅读Thanks♪(・ω・)ノ下一篇文章见!!! 两数…...

Sip - Ubuntu 配置 miniSIPServer 服务器(测试用)
客户提供的账号过期了,简单搭建 SIP 服务器,以便测试使用。个人认为这个配置起来最为简单,且测试功能足够。 官网miniSIPServer - 基于 Windows 以及 Linux 平台的 VoIP (SIP) 服务器软件. miniSIPServer 可能是最容易使用的 VoIP(SIP) 服务器…...
SpringCloud openFeign 之 获取被调用服务名
SpringCloud openFeign 之 获取被调用服务名 一. 概述 低版本 feign 只能获取到被调用方法的信息。 只有高版本 feign 才支持获取到被调用服务的信息。 二. 代码实现 package com.zxguan.springcloud2.template.user;import com.zxguan.springcloud2.template.user.config…...
ChatGPT和文心一言哪个更好用?
ChatGPT和文心一言都是基于深度学习技术的自然语言处理模型,它们各自具有优势和局限性,需要根据具体需求进行选择。以下是两者的比较: 算力:ChatGPT由OpenAI开发,具有强大的文本生成能力和语言理解能力,其训…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...