XML语言
XML语言
在开始介绍Mybatis之前,先介绍一下XML语言,XML语言发明最初是用于数据的存储和传输,它是由一个一个的标签嵌套而成
<?xml version="1.0" encoding="UTF-8" ?>
<outer> <name>阿伟</name><desc>怎么又在玩电动啊</desc> <inner type="1"> <age>10</age> <sex>男</sex> </inner>
</outer>
JDK为我们内置了一个叫做org.w3c
的XML解析库,我们来看看如何使用它来进行XML文件内容解析:
// 创建DocumentBuilderFactory对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 创建DocumentBuilder对象
try {DocumentBuilder builder = factory.newDocumentBuilder();Document d = builder.parse("file:mappers/test.xml");// 每一个标签都作为一个节点NodeList nodeList = d.getElementsByTagName("test"); // 可能有很多个名字为test的标签Node rootNode = nodeList.item(0); // 获取首个NodeList childNodes = rootNode.getChildNodes(); // 一个节点下可能会有很多个节点,比如根节点下就囊括了所有的节点//节点可以是一个带有内容的标签(它内部就还有子节点),也可以是一段文本内容for (int i = 0; i < childNodes.getLength(); i++) {Node child = childNodes.item(i);if(child.getNodeType() == Node.ELEMENT_NODE) //过滤换行符之类的内容,因为它们都被认为是一个文本节点System.out.println(child.getNodeName() + ":" +child.getFirstChild().getNodeValue());// 输出节点名称,也就是标签名称,以及标签内部的文本(内部的内容都是子节点,所以要获取内部的节点)}
} catch (Exception e) {e.printStackTrace();
}
依赖管理
如果使用Maven可以直接引入:
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.16</version>
</dependency>
依赖变多之后,我们可以将其放到一个单独的文件夹,不然会很繁杂:
依赖导入完成后,我们就可以编写Mybatis的配置文件了(现在不是在Java代码中配置了,而是通过一个XML文件去配置
配置文件架构
创建mybatis-config.xml
作为全局配置入口
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 加载 Mapper 文件 --> <mappers> <!--映射文件方式1:一个一个的配置 --> <mapper resource="mapper/UserMapper.xml"/> <!--<mapper resource="com/demo14/mapper/UserMapper.xml"/>--> <!-- <mapper class="mapper.UserMapper.xml"/> 根据实际路径调整 --> <!--映射方式2,自动扫描包内的Mapper接口与配置文件--> <!--<package name="com.demo14.mapper"/>--> </mappers>
</configuration>
实体类与映射文件
UserMapper.xml
是 MyBatis 实现 数据访问层 的核心文件,通过将接口方法与 SQL 绑定,简化数据库操作
<select id="唯一标识(必须与Mapper接口中的方法名一致用于绑定SQL与方法)" parameterType="传入参数类型(可省略),MyBatis通过方法参数自动推断" resultType="返回结果类型,MyBatis将查询结果自动映射到该实体类">
</select>
- 创建与数据库表对应的Java实体类,属性名需与字段名严格对应:
@Data
package com.demo14.entity; /** * 用户实体类 */
public class User { private Integer userid; private String userName; private String userPwd; private Integer userage; ...}
/** * 用户接口类 */
@WebServlet
public interface UserMapper { public User queryUserByName(String userName); }
- 编写Mapper XML文件
TestMapper.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 命名空间需与 Mapper 接口全限定名一致 -->
<mapper namespace="com.demo14.mapper.UserMapper"> <!-- id: 对应 Mapper 接口方法名 parameterType: 参数类型(可省略) resultType: 返回结果实体类全限定名 --> <!-- MyBatis 代理 --><select id="queryUserByName" parameterType="string" resultType="com.demo14.entity.User"> <!--SQL 执行-->SELECT * FROM tb_user WHERE userName = #{userName} </select>
</mapper>
_`resultType`指定结果映射的实体类全路径_
属性外部化
- 创建jdbc.properties
文件管理数据库参数
jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/web_studyjdbc.username=testjdbc.password=123456
- 配置文件引用:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <!-- properties 标签中的配置可以供整个配置文件使用,在任何位置都可以引入其中配置的值 properties 标签可以通过标签property标签来配置一些子元素信息,也可以配置外部的动态文件 --> <!-- 加载外部属性文件(如 jdbc.properties)(支持多环境配置)--> <properties resource="jdbc.properties"/> <!-- 全局参数优化(生产环境必调参数) --><settings> <!-- 启用下划线转驼峰 --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 启用日志输出 --> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!-- 全局设置 --> <!--<settings> 启用字段下划线转驼峰 <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> --> <!-- 配置类型别名(可选) --> <!--<typeAliases> 实体类包路径 <package name="com.example.entity"/> </typeAliases>--> <!-- 数据库环境配置(需与 jdbc.properties 中的参数匹配) --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 加载 Mapper 文件 --> <mappers> <!--映射文件方式1:一个一个的配置 --> <mapper resource="mapper/UserMapper.xml"/> <!--<mapper resource="com/demo14/mapper/UserMapper.xml"/>--> <!-- <mapper class="mapper.UserMapper.xml"/> 根据实际路径调整 --> <!--映射方式2,自动扫描包内的Mapper接口与配置文件--> <!--<package name="com.demo14.mapper"/>--> </mappers> </configuration>
为什么需要 MyBatis 的 <select>
标签配置?
1. 解耦 SQL 与 Java 代码
- 传统 JDBC 问题
SQL 与 Java 代码混杂,导致代码臃肿且难以维护。例如:// 传统 JDBC 代码(硬编码 SQL) String sql = "SELECT * FROM user WHERE name = ?"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, "admin"); ResultSet rs = stmt.executeQuery();
- 缺点:SQL 修改需重新编译 Java 代码,且字符串拼接易引发 SQL 注入。
- MyBatis 解决方案
将 SQL 独立到 XML 文件中,实现 业务逻辑与数据访问逻辑分离:<!-- UserMapper.xml --> <select id="getUserByName" resultType="User">SELECT * FROM user WHERE name = #{name} </select>
2. 自动结果集映射
- 传统 JDBC 问题
手动解析ResultSet
到 Java 对象,代码重复且易错:User user = new User(); while (rs.next()) {user.setId(rs.getInt("id"));user.setName(rs.getString("name"));// ...其他字段 }
- MyBatis 解决方案
通过resultType
或resultMap
自动映射查询结果到对象:<select id="getUserByName" resultType="com.example.User">SELECT id, name, email FROM user WHERE name = #{name} </select>
3. 动态 SQL 支持
-
传统 JDBC 问题
拼接动态 SQL 易出错且难以维护:String sql = "SELECT * FROM user WHERE 1=1 "; if (name != null) {sql += "AND name = '" + name + "' "; // 存在 SQL 注入风险 }
-
MyBatis 解决方案
使用<if>
,<where>
,<foreach>
等标签实现动态 SQL:<select id="searchUsers" resultType="User">SELECT * FROM user<where><if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if></where> </select>
-
核心机制
MyBatis 通过 接口绑定 将 Mapper 接口与 XML SQL 关联:
public interface UserMapper { public User queryUserByName(String userName);
}
- **工作流程**:1. 调用 `userMapper.queryUserByName("admin")`。2. MyBatis 动态代理接口,根据方法名 `getUserByName` 找到对应的 XML SQL。3. 执行 SQL 并返回结果。
替代方案:简单项目可用注解,但 XML 仍是 MyBatis 的推荐实践
为何需要分别两个 mapper
目录?
这样做的原因是为了遵循Maven或Gradle的项目结构约定,构建工具会自动处理资源文件的打包和路径问题
职责分离
构建与部署规范
- Java 代码目录 (
src/main/java
)- 存放可编译的 Java 源文件(如
UserMapper.java
)。 - 构建工具(如 Maven/Gradle)会将其编译为
.class
文件。
- 存放可编译的 Java 源文件(如
- 资源目录 (
src/main/resources
)- 存放非代码文件(如 XML、配置文件)。
- 构建时,资源文件会被复制到
target/classes
(类路径),供 MyBatis 运行时加载。
流程:
-
开发者编写
UserMapper.java
接口。 -
在
UserMapper.xml
中编写对应的 SQL。 -
构建工具将 Java 代码编译为
.class
文件,资源文件复制到类路径 -
MyBatis 启动时,通过 接口名 + 方法名 动态绑定 XML 中的 SQL。
若合并目录:
- 将 XML 文件放在 Java 包目录中,可能导致构建工具忽略资源文件,引发 SQL 映射加载失败
MyBatis 的约定与配置
-
默认映射规则
MyBatis 要求 XML 文件的路径与接口包名一致。例如:- 接口路径:
com.demo14.mapper.UserMapper
- XML 路径:
resources/mapper/UserMapper.xml
- 接口路径:
-
配置验证
在mybatis-config.xml
或 Spring Boot 配置中需指定 XML 文件位置:<!-- MyBatis 配置 --> <mappers><mapper resource="mapper/UserMapper.xml"/> </mappers>
-
在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
相关文章:
XML语言
XML语言 在开始介绍Mybatis之前,先介绍一下XML语言,XML语言发明最初是用于数据的存储和传输,它是由一个一个的标签嵌套而成 <?xml version"1.0" encoding"UTF-8" ?> <outer> <name>阿伟</name&…...
垃圾回收的三色标记算法
目录 1、介绍 1.1、发展 1.2、基本原理 2、执行过程 2.1、初始标记 (Initial Marking) 2.2、并发标记 (Concurrent Marking) 2.3、重新标记 (Remark) 2.4、垃圾清理阶段 3、并发标记 3.1、浮动垃圾 3.2、漏标 前言 三色标记(Tri-color Marking࿰…...
紫禁城多语言海外投资理财返利源码带前端uniapp纯工程文件
测试环境:Linux系统CentOS7.6、宝塔、PHP7.2、MySQL5.6,根目录public,伪静态thinkphp,开启ssl证书 语言:中文简体、英文、越南语、马来语、日语、巴西语、印尼语、泰语 前端是uniapp的源码,我已经把nmp给你…...
深入剖析 I/O 复用之 select 机制
深入剖析 I/O 复用之 select 机制 在网络编程中,I/O 复用是一项关键技术,它允许程序同时监控多个文件描述符的状态变化,从而高效地处理多个 I/O 操作。select 作为 I/O 复用的经典实现方式,在众多网络应用中扮演着重要角色。本文…...
Android开发报错解决
Android开发报错解决 组件相关文件相关权限相关代码相关程序报错IDE相关版本对应框架okhttp请求失败 Roomno such table cocos2d 组件相关 使用gravity属性让文字居中是,需把该属性放在text属性上面ScrollView只能容纳一个子视图 文件相关 放在drawble下的图片资源…...
Linux 网络命名空间:从内核资源管理到容器网络隔离
1. 网络命名空间是什么? 网络命名空间(Network Namespace) 是 Linux 内核提供的一种网络资源隔离机制,用于为进程或容器创建完全独立的网络环境。它并非物理或虚拟的网络接口(如网卡、veth pair 等),而是一个虚拟容器,包含以下资源的独立实例: 网络接口(物理或虚拟)…...
VNC windows连接ubuntu桌面
✅ 步骤 1:安装 VNC 服务器 首先,我们需要在 Winux 系统上安装一个 VNC 服务器。这里我们使用 tigervnc 作为例子,它是一个常用的 VNC 服务器软件。 打开终端并更新你的软件包: sudo apt update安装 tigervnc 服务器:…...
Elastic:如何构建由 AI 驱动的数字客户体验策略
作者:来自 Elastic Elastic Platform Team 客户通过多个数字渠道与企业和组织互动 —— 从网站和应用程序到聊天机器人和电子邮件。这些接触点构成了数字客户体验(DCX)。无缝的数字客户体验能显著提升客户满意度,进而带动更高的收…...
安防多协议接入/视频汇聚平台EasyCVR助力工地/工程/建筑施工领域搭建视频远程监控系统
一、摄像机安装方案 1)安装位置选择:摄像机安装需避开强振源与电磁干扰区,兼顾建筑外观,隐蔽安装。其防护罩应巧妙遮蔽视角,增强安防威慑。电梯轿厢内的摄像机,建议藏于吊顶。连接摄像机的视频、电源及…...
《100天精通Python——基础篇 2025 第16天:异常处理与调试机制详解》
目录 一、认识异常1.1 为什么要使用异常处理机制?1.2 语法错误1.3 异常错误1.4 如何解读错误信息 二、异常处理2.1 异常的捕获2.2 Python内置异常2.3 捕获多个异常2.4 raise语句与as子句2.5 使用traceback查看异常2.6 try…except…else语句2.7 try…except…finally语句--捕获…...
Ceph PG unfound/lost 问题排查与解决
Ceph PG unfound/lost 问题排查与解决 背景现象排查过程经验总结参考命令结语 背景 Ceph 集群出现 HEALTH_ERR,提示有 PG 对象丢失(unfound),并且 repair 无法自动修复。 现象 ceph health detail 显示: HEALTH_ERR …...
LeetCode热题100--54.螺旋矩阵--中等
1. 题目 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入:ma…...
【嵌入式开发-CAN】
嵌入式开发-CAN ■ CAN简介 ■ CAN简介...
SQLite3介绍与常用语句汇总
SQLite3简介 SQLite3是一款轻量级的、基于文件的开源关系型数据库引擎,由 D. Richard Hipp 于 2000 年首次发布。它遵循 SQL 标准,但与传统的数据库系统不同,SQLite 并不运行在独立的服务器进程中,而是作为一个嵌入式数据库引擎直…...
uniapp中score-view中的文字无法换行问题。
项目场景: 今天遇到一个很恶心的问题,uniapp中的文字突然无法换行了。得..就介样 原因分析: 提示:经过一fan研究后发现 scroll-view为了能够横向滚动设置了white-space: nowrap; 强制不换行 解决起来最先想到的是,父…...
[学习]RTKLib详解:ephemeris.c与rinex.c
文章目录 RTKLib详解:ephemeris.c与rinex.cPART A: ephemeris.c一、代码整体作用与工作流程分析1.1 整体作用1.2 工作流程 二、核心函数说明2.1 alm2pos (Almanac to Position)2.2 eph2clk (Ephemeris to Clock)2.3 eph2pos (Ephemeris to Position)2.4 geph2pos (G…...
JDBC:java与数据库连接,Maven,MyBatis
JDBC 是使用Java语言操作关系型数据库的一套API JDBC是接口,用其实现一系列不同种类关系型数据库的实现类 JDBC本质: 官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口 各个数据库厂商去实现这套接口,提供数据库驱动jar包 我…...
代码随想录第39天:单调栈
一、每日温度(Leetcode 739) 思路: 栈里存放的是**“还没等到升温的日子”**的索引; 每遇到一个新的温度: 检查是否比栈顶的温度高; 如果高了,说明升温来了,栈顶元素可以出栈&…...
如何在vite构建的vue项目中从0到1配置postcss-pxtorem
1. 安装postcss-pxtorem和autoprefixer yarn add postcss-pxtorem autoprefixer2. 在vite.config.ts中写入 import { defineConfig } from "vite"; import vue from "vitejs/plugin-vue"; import postcssPxtorem from "postcss-pxtorem"; impo…...
基于51单片机的自动洗衣机衣料材质proteus仿真
地址:https://pan.baidu.com/s/13d2bJ6vKh8ZLuDBZnI0VGw 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C51 是一款常用的 8 位单片机,由 Atmel 公司(现已被 Microchip 收…...
永久免费的小工具,内嵌微软接口
有时候我们制作短视频,需要为视频添加声音,但部分配音软件要收费。不过别担心,今天给大家推荐一款超实用的免费文字转语音软件,完全无需担忧费用问题! 01 软件介绍 这款软件就是Read Aloud,具有以下特点&a…...
C++漫步结构与平衡的殿堂:AVL树
文章目录 1.AVL树的概念2.AVL树的结构3.AVL树的插入4.AVL树的旋转4.1 左单旋4.2 右单旋4.3 右左双旋4.4 左右双旋 5.AVL树的删除6.AVL树的高度7.AVL树的平衡判断希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 二叉搜索树有其自身的缺陷…...
MIST:一键解锁 macOS 历史版本,旧系统安装不再难!
在 Mac 电脑的使用过程中,你是否遇到过这些困扰?为了运行一款经典设计软件,新系统却无法兼容;或是想给老旧 Mac 设备升级,却找不到适配的系统版本。而 App Store 里,旧版 macOS 安装包就像 “隐藏副本”&am…...
mac连接lniux服务器教学笔记
从你的检查结果看,容器内已经安装了 XFCE 桌面环境(xfce.desktop 和 xubuntu.desktop 的存在说明桌面环境已存在)。以下是针对 Docker 容器环境的远程桌面配置方案: 一、容器内快速配置远程桌面(XFCE VNC)…...
网站公安备案流程及审核时间
在中国,网站运营除了需要 ICP备案(工信部备案),还需完成 公安备案(公安机关互联网站安全备案)。以下是详细流程及审核时间说明: 一、公安备案流程 1. 备案对象 所有在中国境内运营的网站&#…...
python学生作业提交管理系统-在线作业提交系统
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...
从颜料混色到网络安全:DH算法的跨界智慧
一、颜料混色的秘密 想象一下,你和朋友各自有一罐私密的颜料,但你们想共同调出一种只有彼此知道的新颜色,而旁观者即使看到你们的操作也无法复现。奇怪的是,你们全程没有直接交换颜料,却能达成共识——这就是**迪菲-赫…...
初学者的AI智能体课程:构建AI智能体的十堂课
初学者的AI智能体课程:构建AI智能体的十堂课 在人工智能(AI)领域,AI智能体正在逐渐发挥其不容忽视的作用。自动化的智能体不仅仅在理论上广泛讨论,更加在实际应用中开辟了一片新的天地。那么如何动手开发属于自己的AI智能体呢?Microsoft提供的AI智能体入门课正是为此而设…...
数据结构 - 8( AVL 树和红黑树 10000 字详解 )
一:二叉搜索树 1.1 回顾二叉搜索树 我们在树的章节中学习了二叉搜索树的概念。二叉搜索树满足以下性质:如果它的左子树存在,则左子树所有节点的值均小于根节点的值;如果右子树存在,则右子树所有节点的值均大于根节点…...
Tcp 通信简单demo思路
Server 端 -------------------------- 初始化部分 ------------------------------- 1.创建监听套接字: 使用socket(协议家族,套接字的类型,0) 套接字类型有 SOCK_STREAM:表示面向连接的套接字(Tcp协议)&…...
Cesium 导航控件(指南针 + 缩放按钮),自定义放置位置
Cesium 导航控件(指南针 缩放按钮) Cesium 导航控件(指南针 缩放按钮)的功能实现,从技术角度来看,可以整理出一整套实现流程和技术结构。这套流程结合了以下几个核心技术点: 1、整体功能目标 …...
MySQL的索引和事务
目录 1、索引 1.1 查看索引 1.2 创建索引 1.3 删除索引 1.4 索引的实现 2、事务 1、索引 索引等同于目录,属于针对查询操作的一个优化手段,可以通过索引来加快查询的速度,避免针对表进行遍历。 主键、unique和外键都是会自动生成索引的…...
【Fifty Project - D25】
今日完成记录 TimePlan完成情况9:00 - 11:30大论文修改修改情况书小论文修改√16:00 - 17 :00Leetcode√ Leetcode 每日一题 到达最后一个房间的最小时间II:和昨天的每日一题大致一样,增加一个条件&…...
pip下载tmp不够
问题描述 今天遇到一个小问题,在用pip安装的时候提示 ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device 但我们单位用于生产环境的机器磁盘都是基本是论TB的,怎么会不够呢? 原因分析:…...
一种机载扫描雷达实时超分辨成像方法——论文阅读
一种机载扫描雷达实时超分辨成像方法 1. 专利的研究目标与产业意义1.1 研究目标与实际问题1.2 产业意义2. 专利的创新方法:滑窗递归优化与实时更新2.1 核心模型与公式2.2 与传统方法对比优势3. 实验设计与验证3.1 仿真参数3.2 实验结果4. 未来研究方向与挑战4.1 学术挑战4.2 技…...
nginx 会话保持(cookie的配置)
nginx会话保持主要有以下几种实现方式。 1. ip_hash ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。 ip_hash语法: upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; …...
nginx 实现动静分离
环境 : 三个机器,准备一个nginx代理 两个http 分别处理动态和静态 知识点--expires expires功能说明---(为客户端配置缓存时间) nginx缓存的设置可以提高网站性能,对于网站的图片,尤其是新闻网站,图片一旦发布,改动的可能是非常小的,为了减小对服务器请求的压力,提高…...
k8s的pod挂载共享内存
k8s的pod挂载共享内存,限制不生效问题: 注:/dev/shm 是 Linux 系统中用于共享内存的特殊路径。通过将 emptyDir 的 medium 设置为 Memory,可以确保 /dev/shm 正确地挂载到一个基于内存的文件系统,从而实现高效的共享内…...
Java高频面试之并发编程-14
hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:指令重排有限制没有?happens-before 又是什么? 在并发编程中,指令重排(…...
Linux基础(最常用基本命令)
1.查看文件ls 1.1 格式 ls 选项 参数,如:ls -lah ~/ 1.2 选项设置: -l:list 以列表方式显示文件 -h:human-readable 以人类可读的方式显示文件大小(会将纯数字转换为kb,mb) -a:all 显示所有的…...
【Python 日期和时间】
Python 中处理日期和时间主要依赖 datetime 模块,结合 dateutil 和 pytz 等第三方库可实现更复杂的需求。以下是日期和时间处理的核心知识点: 一、基础模块 1. datetime 模块 核心类:datetime, date, time, timedelta安装依赖:p…...
C#简易Modbus从站仿真器
C#使用NModbus库,编写从站仿真器,支持Modbus TCP访问,支持多个从站地址和动态启用/停用从站(模拟离线),支持数据变化,可以很方便实现,最终效果如图所示。 项目采用.net framework 4.…...
FPGA图像处理(四)------ 图像裁剪
timescale 1ns / 1ps // // Description: 图像裁剪算法 // module image_crop(input wire clk,input wire reset,input wire [10:0] img_width,input wire [10:0] img_height,input wire [10:0] img_x_start,input wire [10:0] img_x_end,input wire [10:0] img_y_start,input…...
1.MySQL数据库初体验
1.1数据库简介 1.1.1使用数据库的必要性 使用数据库可以高效且条理分明地存储数据,使人们能够更加迅速、方便地管理数据。 数据库特点: a.可以结构化存储大量地数据信息,方便用户进行有效的检索 b.可以有效地保持数据信息的一致性、完整…...
量子密码的轻量级通信协议笔记
代码笔记 本文档提供了项目代码的详细说明,包括代码结构、关键算法实现和重要的代码片段。 代码结构 . ├── Makefile # 构建系统配置 ├── coap_client.c # CoAP客户端实现 ├── coap_server.c # CoAP服务端实现 ├─…...
探索 C++ 在行业应用与技术融合中的核心价值
引言 在科技飞速发展的今天,C 作为一门兼具高性能与灵活性的编程语言,正深度融入游戏开发、人工智能、区块链等多个关键领域。其高效的内存管理、底层控制能力以及对现代硬件架构的深度优化,使其成为复杂系统开发的首选语言。本文将深入探讨…...
雷赛伺服电机
ACM0经济 编码器17位: ACM1基本 编码器23位磁编, ACM2通用 编码器24位光电, 插头定义:...
word文档基本操作: 编辑页眉页脚和插入目录
文章目录 引言I 编辑页眉页脚II 插入目录III 知识扩展基于axure画架构图基于Knife4j导出接口文档基于PDManer导出数据库设计文档引言 背景: 信息安全认证需要准备相关文件用于审核 一般的开发设计包含总体设计、概要设计、详细设计、接口设计、数据库设计、部署结构设计、原型…...
数据结构(二)——线性表的链式表示和实现
一、单链表 1.单链表的定义 如图所示每个节点包含两个域:数据域和指针域。数据域存储数据元素,指针域存储下一个节点的地址,因此指针指向的类型也是节点类型。每个指针都指向下一个节点,都是朝一个方向的,这样的链表称为单向链表…...
HTML10:iframe内联框架
iframe内部框架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>内联框架学习</title> </head> <body> <!--iframe内联框架 src:地址 width-height:高度宽度 --> <iframe…...