MybatisPlus(SpringBoot版)学习第四讲:常用注解
目录
1.@TableName
1.1 问题
1.2 通过@TableName解决问题
1.3 通过全局配置解决问题
2.@TableId
2.1 问题
2.2 通过@TableId解决问题
2.3 @TableId的value属性
2.4 @TableId的type属性
2.5 雪花算法
1.背景
2.数据库分表
①垂直分表
②水平分表
1>主键自增
2>取模
3. 雪花算法官方解释
3.@TableField
3.1 情况1:驼峰命名
3.2 情况2:属性字段不一样
4.@TableLogic
4.1 逻辑删除
4.2 实现逻辑删除
4.3 查询
1.@TableName
经过以上的测试,在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在 Mapper接口继承BaseMapper时,设置了泛型User,而操作的表为user表
由此得出结论, MyBatis-Plus在确定操作的表时,由BaseMapper的泛型决定,即实体类型决定,且默认操作的表名和实体类型的类名一致.
1.1 问题
若实体类类型的类名和要操作的表的表名不一致,会出现什么问题?
我们将表user更名为t_user ,测试查询功能
程序抛出异常, Table 'mybatis_plus.user'doesn't exist,因为现在的表名为t_user ,而默认操作的表名和实体类型的类名一致,即user表
1.2 通过@TableName解决问题
在实体类类型上添加@TableName("t_user"),标识实体类对应的表,即可成功执行SQL语句
1.3 通过全局配置解决问题
在开发的过程中,我们经常遇到以上的问题,即实体类所对应的表都有固定的前缀,例如t_或tbl_
此时,可以使用MyBatis-Plus提供的全局配置,为实体类所对应的表名设置默认的前缀,那么就不需要在每个实体类上通过@TableName标识实体类对应的表。
# 配置MyBatis日志
mybatis-plus:configuration:# 配置MyBatis日志log-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:db-config:# 配置MyBatis-Plus操作表的默认前缀table-prefix: t_
2.@TableId
经过以上的测试, MyBatis-Plus在实现CRUD时,会默认将id作为主键列,并在插入数据时,默认 基于雪花算法的策略生成id.
2.1 问题
若实体类和表中表示主键的不是id,而是其他字段,例如uid , MyBatis-Plus会自动识别uid为主键列吗?
我们实体类中的属性id改为uid,将表中的字段id也改为uid,测试添加功能
程序抛出异常, Field 'uid'doesn't have a default value,说明MyBatis-Plus没有将uid作为主键 赋值
2.2 通过@TableId解决问题
在实体类中uid属性上通过@TableId将其标识为主键,即可成功执行SQL语句
2.3 @TableId的value属性
若实体类中主键对应的属性为id,而表中表示主键的字段为uid,此时若只在属性id上添加注解 @TableId,则抛出异常Unknown column'id'in'field list',即MyBatis-Plus仍然会将id作为表的 主键操作,而表中表示主键的是字段uid
此时需要通过@TableId注解的value属性,指定表中的主键字段, @TableId("uid")或@TableId(value="uid")
2.4 @TableId的type属性
type属性用来定义主键策略
常用的主键策略:
值
描述
IdType.ASSIGN_ID (默 认)
基于雪花算法的策略生成数据id,与数据库id是否设置自增无关
IdType.AUTO
使用数据库的自增策略,注意,该类型请确保数据库设置了id自增, 否则无效
配置全局主键策略:
# 配置MyBatis日志
mybatis-plus:configuration:# 配置MyBatis日志log-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:db-config:# 配置MyBatis-Plus操作表的默认前缀table-prefix: t_# 配置MyBatis-Plus的主键策略id-type: auto
2.5 雪花算法
1.背景
需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。
数据库的扩展方式主要包括:业务分库、主从复制,数据库分表。
2.数据库分表
将不同业务数据分散存储到不同的数据库服务器,能够支撑百万甚至千万用户规模的业务,但如果业务继续发展,同一业务的单表数据也会达到单台数据库服务器的处理瓶颈。例如,淘宝的几亿用户数据, 如果全部存放在一台数据库服务器的一张表中,肯定是无法满足性能要求的,此时就需要对单表数据进行拆分。
单表数据拆分有两种方式:垂直分表和水平分表。示意图如下:
①垂直分表
垂直分表适合将表中某些不常用且占了大量空间的列拆分出去。
例如,前面示意图中的 nickname 和 description 字段,假设我们是一个婚恋网站,用户在筛选其他用户的时候,主要是用 age 和 sex 两个字段进行查询,而 nickname 和 description 两个字段主要用于展 示, 一般不会在业务查询中用到。description 本身又比较长,因此我们可以将这两个字段独立到另外 一张表中,这样在查询 age 和 sex 时,就能带来一定的性能提升。
②水平分表
水平分表适合表行数特别大的表,有的公司要求单表行数超过 5000 万就必须进行分表,这个数字可以 作为参考,但并不是绝对标准,关键还是要看表的访问性能。对于一些比较复杂的表,可能超过 1000 万就要分表了;而对于一些简单的表,即使存储数据超过 1 亿行,也可以不分表。
但不管怎样,当看到表的数据量达到千万级别时,作为架构师就要警觉起来,因为这很可能是架构的性能瓶颈或者隐患。
水平分表相比垂直分表,会引入更多的复杂性,例如要求全局唯一的数据id该如何处理
1>主键自增
①以最常见的用户 ID 为例,可以按照 1000000 的范围大小进行分段, 1 ~ 999999 放到表 1中, 1000000 ~ 1999999 放到表2中,以此类推。
②复杂点:分段大小的选取。
分段太小会导致切分后子表数量过多,增加维护复杂度;
分段太大可能会 导致单表依然存在性能问题,
一般建议分段大小在 100 万至 2000 万之间,具体需要根据业务选取合适 的分段大小。
③优点:可以随着数据的增加平滑地扩充新的表。例如,现在的用户是 100 万,如果增加到 1000 万, 只需要增加新的表就可以了,原有的数据不需要动。
④缺点:分布不均匀。假如按照 1000 万来进行分表,有可能某个分段实际存储的数据量只有 1 条,而 另外一个分段实际存储的数据量有 1000 万条。
2>取模
①同样以用户 ID 为例,假如我们一开始就规划了 10 个数据库表,可以简单地用 user_id % 10 的值来表示数据所属的数据库表编号, ID 为 985 的用户放到编号为 5 的子表中, ID 为 10086 的用户放到编号为 6 的子表中。
②复杂点:初始表数量的确定。表数量太多维护比较麻烦,表数量太少又可能导致单表性能存在问题。
③优点:表分布比较均匀。
④缺点:扩充新的表很麻烦,所有数据都要重分布。
3. 雪花算法官方解释
雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的 主键的有序性。
①核心思想:
长度共64bit(一个long型)。
首先是一个符号位, 1bit标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负 数是1,所以id一般是正数,最高位是0。
41bit时间截(毫秒级),存储的是时间截的差值(当前时间截 - 开始时间截),结果约等于69.73年。
10bit作为机器的ID( 5个bit是数据中心, 5个bit的机器ID,可以部署在1024个节点)。
12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID)。
②优点:整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞,并且效率较高。
3.@TableField
经过以上的测试,我们可以发现, MyBatis-Plus在执行SQL语句时,要保证实体类中的属性名和表中的字段名一致
如果实体类中的属性名和字段名不一致的情况,会出现什么问题呢?
3.1 情况1:驼峰命名
若实体类中的属性使用的是驼峰命名风格,而表中的字段使用的是下划线命名风格
例如实体类属性userName,表中字段user_name
此时MyBatis-Plus会自动将下划线命名风格转化为驼峰命名风格
相当于在MyBatis中配置驼峰config配置。
3.2 情况2:属性字段不一样
若实体类中的属性和表中的字段不满足情况1
例如实体类属性name ,表中字段username
此时需要在实体类属性上使用@TableField("username")设置属性所对应的字段名
4.@TableLogic
4.1 逻辑删除
物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据
逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
使用场景:可以进行数据恢复
4.2 实现逻辑删除
step1 :数据库中创建逻辑删除状态列,设置默认值为0
step2 :实体类中添加逻辑删除属性
step3 :测试
测试删除功能,真正执行的是修改
UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0
测试查询功能,被逻辑删除的数据默认不会被查询
SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0
@Autowired
private PeopleMapper peopleMapper;
@Test
public void testDeleted(){peopleMapper.deleteById(7L);}
4.3 查询
@Test
public void testSelect(){peopleMapper.selectList(null);
}
相关文章:
MybatisPlus(SpringBoot版)学习第四讲:常用注解
目录 1.TableName 1.1 问题 1.2 通过TableName解决问题 1.3 通过全局配置解决问题 2.TableId 2.1 问题 2.2 通过TableId解决问题 2.3 TableId的value属性 2.4 TableId的type属性 2.5 雪花算法 1.背景 2.数据库分表 ①垂直分表 ②水平分表 1>主键自增 2>取…...
集成开发环境革新:IntelliJ IDEA与Cursor AI的智能演进
集成开发环境革新:IntelliJ IDEA 与 Cursor AI 的智能演进 集成开发环境(IDE) 是软件开发者必不可少的工具。一个优秀的 IDE 不仅能够帮助编写和调试代码,还能集成版本控制和代码优化等多种功能。如今,随着人工智能&a…...
Qt弹出新窗口并关闭(一个按钮)
参考:Qt基础 练习:弹出新窗口并关闭的两种实现方式(两个按钮、一个按钮)_qt打开一个窗口另一个关闭-CSDN博客 实现: 一个按钮,点击一次,按钮的名字从open window变为close window,…...
暴力搜索算法详解与TypeScript实战
# 暴力搜索算法详解与TypeScript实战## 什么是暴力搜索?暴力搜索(Brute Force Search)是算法领域最基础的解题方法之一,其核心思想是**系统性地枚举所有可能的候选解**,并验证每个候选解是否满足问题条件。这种方法不依…...
[识记]Mysql8 远程授权
今天在测试docker时,因更换为Mysql8,使用SQL方式实现远程授权,其方式方法同于Mysql,但语句稍有不同,仅供参考。 登录mysql mysql -u root -p 输入密码: [请依据交互输入你的mysql密码]切换数据库 use mysql;选择需要…...
5.1 WPF路由事件以及文本样式
一、路由事件 WPF中存在一种路由事件(routed event),该事件将发送到包含该控件所在层次的所有控件,如果不希望继续向更高的方向传递,只要设置e.Handled true即可。 这种从本控件-->父控件->父的父控件的事件&am…...
做规控算法时用到的一些简单函数和功能(c++)(持续更新中)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、将偏航角转换为四元数二、RCLCPP_INFO_STREAM(rclcpp::get_logger("mission_planner"),"(打印标志位)"<<…...
android studio 运行flutter项目
在Android Studio中运行Flutter项目 简介 Flutter是一个流行的跨平台移动应用开发框架,而Android Studio是一种强大的集成开发环境,支持Flutter开发。本文将介绍如何在Android Studio中运行Flutter项目,让开发者能够更加方便地进行Flutter应…...
如何用 Postman 进行高效的 Mock 测试?
Postman 是一个强大的 API 开发和测试工具,它可以让你轻松地创建和发送各种 HTTP 请求,查看响应结果,并进行调试和优化。但是有时候,你可能还没有开发好后端服务,或者想要模拟不同的响应场景,这时候就可以使…...
1718_js事件
目录 事件基础 一 DOM0级事件 1.1添加事件 1.2删除事件 二 DOM2级事件 2.1 添加事件 2.2 移除事件 三 常见的鼠标事件 四 其他事件 五 事件对象 5.1 获取事件对象 5.2 兼容写法 六 七、键盘事件 7.2键盘码 7.3 组合键 八、事件对象的属性 九、 事件冒泡 十…...
OpenCV图像输入输出模块imgcodecs
《OpenCV计算机视觉开发实践:基于Python(人工智能技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 要处理图像,第一步就是把图像文件从磁盘上读取到内存,处理完毕后再保存到内存,所以…...
OAS光学分析软件 | 高光束反射器设计案例
简介 在光学设计领域,满足特定的光束要求并符合相关标准规范是设计的关键目标。本次设计旨在借助 OAS 光学分析软件,打造一个符合欧洲经委会(ECE)规定的高光束反射器。欧洲经委会对狭窄宽度(高)波束图案有…...
检查指定的IP地址和端口号是否可以连接
是的,Socket 类可以直接用来检查指定的IP地址和端口号是否可以连接。以下是一个简单的Java代码示例,展示如何使用 Socket 类来检查连接是否可用: import java.net.Socket; import java.net.UnknownHostException; public class NetworkCheck…...
【商城实战(93)】商城高并发实战:分布式锁与事务处理深度剖析
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
【C++】模拟实现一颗二叉搜索树
❤️欢迎来到我的博客❤️ 前言 搜索二叉树是在二叉树的基础上加了一个特征:左子树的所有节点都小于根,右子树的所有节点都大于根(每一颗子树都要满足) 因为这个特性的存在,使得他特别擅长搜索数据 比如我要寻找10&a…...
vue 点击放大,图片预览效果
背景: 在vue框架element组件的背景下,我们对图片点击放大(单张);如果是多张图片,要支持左右滑动查看多张图片(多张)。 图片单张放大,el-image图片组件,或者原生的img标签。previewSrcList string[单个] 图片…...
AI知识补全(七):AI Agent 智能代理是什么?
名人说:人生如逆旅,我亦是行人。 ——苏轼《临江仙送钱穆父》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:AI知识补全(六):RLHF 人类反馈…...
Java 中各种锁的使用详解
Java 锁的使用详解 Java 提供了多种锁机制来处理并发编程中的同步问题。下面我将通过代码示例来展示各种锁的使用方法和特点。 锁的选择指南 以下是选择合适锁的指南: 基本锁类型演示 // 由于这是在 Node.js 环境中模拟 Java 锁的概念,我们将使用注释…...
【GreenHills】GHS解决客户端在连接的时候提示在黑名单
1、 文档目标 解决GHS网络版客户在客户端连接的时候出现黑名单的问题 2、 问题场景 用于解决GHS的网络版客户在搭建完服务端后,客户端去连接服务的时候出现提示“在黑名单中”等情况(如图2-1和图2-2)。但是在服务器上面并没有设置黑名单。 …...
智能运维时代的网络拓扑管理:乐维监控的架构可视化实践
在数字化转型的浪潮中,企业IT基础设施正经历着前所未有的复杂化进程。当数以千计的网络设备、服务器、存储系统构成庞大网络体系时,如何实现全局可视化管理已成为企业数字化转型的关键命题。乐维监控网络拓扑系统作为新一代智能运维平台的核心组件&#…...
GitHub美化个人主页3D图表显示配置操作
这个功能主要是用的这个开源仓库:https://github.com/yoshi389111/github-profile-3d-contrib 想看效果的话,我的个人主页:https://github.com/Sjj1024 开始操作 1.创建自己的github主页属性项目——跟你github用户名一致即可,…...
Arduino示例代码讲解:Serial Event example 连续事件例子
Arduino示例代码讲解:Serial Event example 连续事件例子 Serial Event example 连续事件例子功能概述硬件部分:软件部分:代码逐行解释定义变量`setup()` 函数`loop()` 函数`serialEvent()` 函数工作原理Serial Event example 连续事件例子 这段代码是一个Arduino示例程序,…...
Java基础关键_031_反射(一)
目 录 一、概述 二、获取 Class 的三种方式 1.Class.forName("完整全限定类名") 2.getClass() 3.class 属性 三、通过反射机制实例化对象 1.newInstance()(已过时) 2.配置文件利用反射机制实例化对象 四、反射 Class 的 Field 1.获取 P…...
verilog/systemverilog中的位序问题
verilog或者systemverilog中在使用位选择时,必须按照定义的大小端顺序进行位选操作,比如定义了reg [11:0] data,在使用data的中间4位时,必须使用data[7:4],不能使用data[4:7]。 如下示例: module tb;reg […...
JVM考古现场(十三):混沌重启——从量子永生到宇宙热寂的终极编译
开篇:鸿蒙初判熵火燎原"诸君可曾窥见《诛仙剑阵》终章里那冻结的量子递归?当Project Omega的热寂算法冰封时空熵增,当意识编译器的玻尔兹曼大脑撕裂熵障,此刻我们将踏碎归墟晶壁,在第十三维度叩问:从代…...
CARLA常见技术问题集锦(一)地图与场景构建篇
编者荐语: 在自动驾驶技术加速落地的今天,CARLA 仿真引擎凭借其开源生态与高保真仿真能力,已成为全球开发者构建智能驾驶算法的核心工具之一。随着虚幻引擎 5.5 的全面升级,CARLA 0.10.0 版本实现了视觉革命:Lumen 全…...
视图、MySQL、触发器、存储过程、流程控制语句
DAY19.1 Java核心基础 MySQL 视图 数据库中的一张虚拟的表,允许不同用户和不同程序以不同的方式查询同一张表的数据 基于数据表,创建一个虚拟的表,然后可以选择需要展示的字段 为不同的用户创建不同的视图,一个视图包含薪资&…...
多层感知机(MLP)全面指南
多层感知机(MLP) 是一种人工神经网络,由多个神经元层组成。MLP中的神经元通常使用非线性激活函数,使得网络能够学习数据中的复杂模式。MLP 在机器学习中非常重要,因为它能够学习数据中的非线性关系,使其成为分类、回归和模式识别等任务中的强大模型。 神经网络基础 神经…...
【第13届蓝桥杯C/C++B组省赛】顺子日期
答案:14 1.数组办法解决 思路:前四个元素已经确定,分别枚举其他元素的合法性 #include <stdio.h> int main() {int a[8] {2,0,2,0,0,0,0,0};int month[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};int i,j;int count 0;for(i 1;…...
智慧医疗胃癌检测数据集VOC+YOLO格式487张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):487 标注数量(xml文件个数):487 标注数量(txt文件个数):487 标注…...
每日一题-力扣-2716: 最小化字符串长度 0328
LeetCode 2716: 最小化字符串长度问题剖析 题目解读 LeetCode 2716 是一道关于字符串操作的算法题。这道题乍看复杂,实则蕴含着优雅的数学规律。题目要求通过一系列特定的删除操作来最小化字符串的长度: 给定一个下标从 0 开始的字符串 s每次操作可以选…...
量子计算:开启未来计算的新纪元
一、引言 在当今数字化时代,计算技术的飞速发展深刻地改变了我们的生活和工作方式。从传统的电子计算机到如今的高性能超级计算机,人类在计算能力上取得了巨大的进步。然而,随着科技的不断推进,我们面临着越来越多的复杂问题&…...
安卓车载app面经
java部分 常见集合类 List 继承了Collection接口的一个接口,List中的数据是有序的,可重复的 实现类 在Java中,List 是一个接口,它属于 Java Collections Framework 的一部分。List 接口代表了一个有序的集合(有时…...
JAVA SE :认识数组
目录 1.概念 2.数组的创建和初始化 2.1 创建 2.2 初始化 3.数组的使用 4.认识引用数据类型 4.1 JVM的内存分布 4.2 基本数据类型和引用数据类型 4.3 null的认识 5.二维数组 6.Arrays类的了解和使用 1.概念 数组用于存储一定数量相同类型的数据,可以看…...
深入理解机器学习之TF-IDF:文本特征提取的核心技术
文章目录 引言一、什么是TF-IDF?二、TF-IDF的数学原理1. 词频(TF)计算2. 逆文档频率(IDF)计算3. TF-IDF计算 三、TF-IDF的Python实现1.数据文件介绍2.导入库3.读取数据4.数据预处理5.对单词进行排序6.全部代码 四、结语 引言 在自然语言处理(NLP)和文本挖掘领域&am…...
Anaconda Jupyter 默认启动位置修改
Anaconda Jupyter 默认启动位置修改 本篇给大家分享的事关于Anaconda Jupyter的保存路径修改方法。 我们使用Anaconda Jupyter默认启动时,通常会跳转进入C盘的用户目录下,如下图所示。 但是很多时候我们使用 Jupyter 的场景并不在C盘,因为它…...
CNG汽车加气站操作工备考真题及答案解析【判断题】
1、燃气经营许可证按照燃气经营规模和类别实行分级审批。(√) 解析:不同规模和类别的燃气经营,其许可证审批级别不同,以确保经营活动的规范和安全。 2、依照《安全生产法》的规定,安全生产监督检查人员对检…...
es 3期 第27节-运用Script脚本实现复杂需求
#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性ÿ…...
智能监控视频聚合平台,GB28181/RTSP/SIP/RTMP直播会议融合方案
全场景智能监控聚合平台:打破边界,赋能高效协同 在数字化转型加速的今天,海量视频监控设备、多样化的编码协议与复杂的业务场景,让企业面临跨系统整合难、资源调度效率低、协作响应慢等痛点。我们的智能监控聚合平台以技术创新为…...
B494:开关电源领域的PWM控制新星
在电子技术飞速发展的今天,高效的电源管理系统成为各类电子设备稳定运行的关键。B494电压驱动型脉宽调制(PWM)控制集成电路以其卓越的性能和丰富的功能,成为开关电源设计领域的焦点。 一、B494:开关电源领域的PWM控制…...
03 相机标定图像采集
学完本文,您将获取一下技能: 1:如何提升标定质量,如选择标定板,标定图像采集的注意事项, 2:实现标定图像自动筛选的代码 3:量产场景如何通过一张图像来标定相机 为了实现良好的标定效果,以下因素在标定数据采集前必须设置得当。 标定板选择 标定板尺寸准确材料平…...
详解Spark executor
在 Apache Spark 中,Executor(执行器) 是运行在集群工作节点(Worker Node)上的进程,负责执行具体的计算任务并管理数据。它是 Spark 分布式计算的核心组件之一,直接决定了任务的并行度和资源利用…...
约束文件SDC常用命令
约束文件SDC常用命令 定义时钟create_clock -name CLK-period 2 [get_ports_clk]告诉工具主时钟周期是2ns(频率500MHz),从clk端口输入 输入信号延迟set_input_delay 0.5 -clock CLK [get_ports data_in]数据进芯片前,外部电路已消耗0.5ns,综合要预留这段“堵车时间”。 输出…...
流量分析2
一,webshell流量 [GKCTF 2021]签到 先看协议分级,大部分是tcp,里面有http的基于的行文本数据占了很大的比重,看看里面有什么 过滤http的流量 点击一条流量,里面的内容进去后面有基于行的文本数据, 先解he…...
23种设计模式-组合(Composite)设计模式
组合设计模式 🚩什么是组合设计模式?🚩组合设计模式的特点🚩组合设计模式的结构🚩组合设计模式的优缺点🚩组合设计模式的Java实现🚩代码总结🚩总结 🚩什么是组合设计模式…...
数据库概述
文章目录 数据库1、什么是数据库?2、数据库的分类关系型数据库非关系型数据库优缺点 3、MySQL数据库的安装和使用3.1 卸载3.2 安装命令行操作 4、 Navicat For MySQL连接MySQL新建数据库新建表在表中添加数据执行SQL语句 数据库 1、什么是数据库? 数据…...
C# System.Text.Encoding 使用详解
总目录 前言 在C#编程中,处理字符串和字节数组之间的转换是一个常见的任务。System.Text.Encoding类及其派生类提供了丰富的功能,帮助开发者实现不同字符编码之间的转换。本文将详细讲解System.Text.Encoding类的使用方法,包括常用编码的介绍…...
js 对象深拷贝的五种方法
js 对象深拷贝 今天遇到一个bug ,子组件页面修改了内容,但是按了取消保存按钮,没有将数据传回父组件的,但是父组件的数据改了,原因是通过子组件接受父组件的参数对象层级深没有做深拷贝的原因。 在 JavaScript 中&…...
1.1 计算机网络的概念
首先来看什么是计算机网络,关于计算机网络的定义并没有一个统一的标准,不同的教材有 不同的说法(这是王道书对于计算机网络的定义),我们可以结合自己的生活经验去体会这个 定义。 可以用不同类型的设备去连接计算机网络…...
当EFISH-SBC-RK3576遇上区块链:物联网安全与可信数据网络
在工业物联网场景中,设备身份伪造与数据篡改是核心安全隐患。EFISH-SBC-RK3576 通过 硬件安全模块 区块链链上验证,实现设备身份可信锚定与数据全生命周期加密,安全性能提升10倍以上。 1. 安全架构:从芯片到链的端到端防…...