新闻详情

新闻详情

首页 / 资讯中心 / 详情

MODBUS协议调试实战:从寄存器映射到异常码排查,嵌入式通信避坑指南

发布时间:2026/9/6 9:26:37来源:尧图网络
MODBUS协议调试实战:从寄存器映射到异常码排查,嵌入式通信避坑指南
作为嵌入式工程师调试设备与上位机或PLC之间的通信MODBUS协议几乎是一道绕不过去的坎。你在网上搜“modbus协议”能搜出一堆帧格式说明和寄存器表格但真正到了现场面对一堆十六进制数据抓头皮的情况我见得太多了。这篇笔记就是基于我个人在项目里调试MODBUS的经历把协议要点、调试工具、实战案例和踩坑记录一次性写清楚。我没有按教科书的方式重讲一遍协议而是假设你已经有了基本概念但缺的是“这东西到底怎么调通”的临门一脚。文章会先从协议的核心机制和分析思路入手然后给出完整的调试流程、工具选择和实操演示最后附上我这几年积累的问题排查速查表。无论你是刚接触MODBUS的新手还是被设备兼容性问题折磨的老手这篇内容应该都能帮上忙。1. 内容整体设计与思路拆解1.1 为什么现场调试MODBUS光看协议文档远远不够MODBUS协议本身并不复杂它就是一个主从问答式的应用层协议跑在串口RTU/ASCII模式或者以太网TCP模式上。但实战调试时你会发现真正的难点往往不在协议本身而在几个协议文档之外的地方。第一个坑是设备地址和寄存器映射表。不同厂家的设备虽然都宣称支持MODBUS但寄存器地址对应的含义可能完全不同。有的从0开始编号有的从1开始编号有的寄存器是16位有符号数有的是32位浮点数字节顺序还有大小端之分。协议文档只告诉你帧格式但不会告诉你这个设备内部的数据是怎么存储的这部分得靠设备手册和实测去确认。第二个坑是串口参数。MODBUS RTU通常默认9600波特率、8数据位、无校验、1停止位但总有一些设备厂家喜欢用19200或者偶校验。如果上位机和设备参数不一致表现就是能收到数据但全是乱码或者干脆收不到任何响应。有些设备还支持自动波特率识别但第一次上电时仍然需要一个固定参数。第三个坑是时序。MODBUS RTU对帧间隔有严格要求两个帧之间需要至少3.5个字符时间的静默期。如果上位机或主站发送速度太快没有留出静默期从站可能会把两个连续的请求误判为一个帧直接导致响应异常。这种问题在调试工具里很难复现因为调试工具往往自己会处理时序但你的嵌入式代码或上位机软件就不一定了。所以说MODBUS调试的核心思路不是去逐字节分析协议帧那是协议栈该做的事而是建立一套“先确认链路再确认参数最后确认数据”的排查流程。链路通不通用串口助手或调试助手一测便知参数对不对看设备返回的异常码就能判断数据准不准才需要逐寄存器去验证。这三步走下来80%的通信问题都能定位。1.2 主从问答机制是理解所有调试现象的基础MODBUS最核心的设计就是主从问答。总线上只有一个主站Master其余都是从站Slave。主站发起请求从站响应从站之间不能直接通信从站也不能主动向主站发数据。这种机制在工业现场非常可靠因为逻辑简单不会出现总线冲突。调试的时候掌握这个机制非常关键。比如你用串口调试助手模拟主站发送一个读保持寄存器的请求帧如果从站正常会返回一个响应帧如果从站返回异常帧功能码最高位置1说明请求本身有问题比如寄存器地址超范围或功能码不支持。这时候问题一定在你发的请求帧上而不是设备坏了。主从问答还有一个隐蔽的问题如果总线上有两个设备设置了相同的从站地址这两个设备都会收到主站的请求也都会尝试响应结果就是总线冲突主站收到一堆乱码或者CRC错误。这种问题在只有一个设备的调试阶段不会暴露但到了多设备组网时就会让你怀疑人生。排查方法很简单逐个检查设备地址设置确保不重复。1.3 模式选型RTU、ASCII还是TCPMODBUS协议家族里实际工程中最常见的是RTU和TCPASCII模式已经很少见了。但选型时还是要看场景。RTU模式用二进制编码数据密度高同样的波特率下传输效率更高。但它对时序敏感对主站的帧间隔控制要求高。如果你的设备是MCU跑RTU模式时建议用定时器配合串口空闲中断来实现帧超时判断而不是简单地靠接收中断加延时。ASCII模式把每个字节拆成两个ASCII字符传输可读性极好可以直接用文本方式在串口助手里查看内容调试时非常方便。但传输效率低一倍而且解析逻辑更复杂实际产品中很少用。除非你有调试需求否则不建议新项目用ASCII模式。TCP模式跑在以太网上本质上只是把RTU帧封装到TCP包里去掉CRC校验因为TCP本身有可靠性保证加了一个6字节的MBAP报文头。MODBUS TCP调试比串口简单得多因为不涉及波特率、校验位这些参数只要IP和端口默认502对上就能通。但要注意有些设备支持端口自定义比如有的PLC把MODBUS TCP端口改成了6000需要看设备手册确认。2. MODBUS协议核心细节与寄存器映射解析2.1 消息帧格式别死记硬背理解每个字节的作用MODBUS RTU的一个请求帧结构是这样的从站地址1字节 功能码1字节 数据段N字节 CRC校验2字节低字节在前。从站地址不用说就是你要访问的设备ID。功能码告诉设备你要做什么操作。数据段根据功能和功能码不同而不同可能是寄存器起始地址加数量也可能是写入的数据内容。CRC校验是前面所有字节的循环冗余校验用来保证数据传输不损坏。举个例子你要读取地址为0x0000的保持寄存器数量是1个请求帧就是01 03 00 00 00 01 C4 0B。01是从站地址03是读取保持寄存器的功能码00 00是起始寄存器地址00 01是读取数量C4 0B就是前面6个字节的CRC校验值。很多人会纠结CRC是怎么算的其实不用手动算。调试工具和协议栈都会自动算你只需要会验证即可。但有一个坑要注意看抓包工具显示的CRC时要确认字节序。RTU的CRC传输时低字节在前比如上面的C4 0B实际计算值是0x0BC4传输时先发C4再发0B。如果你在日志里看到CRC是反的不代表算错了只是展示方式不同。2.2 寄存器空间与地址映射设备手册比协议更重要MODBUS协议定义了四类数据线圈Coil、离散输入Discrete Input、输入寄存器Input Register、保持寄存器Holding Register。线圈和离散输入都是位bit类型输入寄存器和保持寄存器都是16位1个字类型。但这里有个关键细节MODBUS协议里的寄存器地址是协议地址Protocol Address从0开始而设备手册里常常用数据地址Data Address从1开始来描述。比如手册说“保持寄存器40001对应协议地址0x0000”如果你直接往地址1发送读请求就错了。从实操角度我强烈建议你在写代码或配调试工具时一律使用协议地址0x0000这种不要用PLC里的40001这种表示法。很多血泪教训就是因为40001和0x0000的换算没搞对导致读出来的数据永远是0或者返回异常。寄存器数值的解析也是个大坑。一个16位寄存器能表示的数值范围是-32768到32767有符号或者0到65535无符号但很多设备的实际数据需要32位甚至浮点数那就得连续读取两个寄存器然后拼起来。拼接时先读到的寄存器是高位还是低位这取决于设备厂家的设计常见的有“大端模式”先读到高16位和“小端模式”先读到低16位。没有统一标准只能靠实测或手册确认。我调试过一个温湿度传感器手册只说“温度值占两个寄存器”但没说字节序。我按大端解析温度显示-40度按小端解析显示25.3度显然小端才是正确的。这种问题如果你在代码里写死一种字节序那出货后设备数据全错排查难度极大。所以建议在初始化阶段就加一个“字节序验证”的测试用例用已知数值去验证解析是否正确。2.3 常用功能码读什么、写什么、怎么判断是否支持MODBUS的功能码很多但实际项目中90%的通信只用到三个03读保持寄存器、04读输入寄存器、06写单个保持寄存器。再加一个160x10写多个保持寄存器基本就覆盖了绝大多数场景。功能码01读线圈和02读离散输入主要用在PLC的数字量输入输出场景如果你调试的是传感器、变送器、电机驱动器这类设备很少用到这两个功能码。功能码05写单个线圈和150x0F写多个线圈用于控制DO输出。注意有些设备支持03读保持寄存器但不一定支持06写保持寄存器因为写操作意味着允许外部修改设备内部参数出于安全考虑很多设备会关闭写功能。调试时如果发送写请求返回异常码01非法功能码别慌先看设备手册确认是否支持写操作。判断设备支持哪些功能码最直接的方法还是看手册。但如果没有手册也可以用调试工具发送不同功能码的请求看哪些能收到正常响应哪些返回异常码。这个方法虽然粗暴但在设备型号老旧、资料丢失的情况下非常管用。2.4 异常响应码设备在告诉你错在哪里当请求有问题时从站不会沉默而是返回一个异常帧。异常帧的结构是从站地址 功能码0x80 异常码 CRC。其中功能码最高位置1表示这是一个异常响应异常码则具体说明错误类型。常见的异常码如下表异常码含义常见原因01非法功能码设备不支持这个功能码或者写功能被禁用02非法数据地址寄存器地址超出范围注意协议地址和PLC地址的换算03非法数据值请求里的寄存器数量不对或者写入的数据超出允许范围04从站设备故障设备内部错误多为硬件问题或设备未就绪调试时看到异常码第一反应不是查协议而是对照设备手册检查你的请求帧。比如返回异常码02先确认寄存器地址是不是超范围了很多设备的寄存器不是连续分布的中间有空洞你读到空洞地址就会报02。异常码03比较隐蔽。比如你向一个保持寄存器写入数据数值超过设备允许的最大值设备会返回03。这时候你要看设备手册里该寄存器的取值范围有些设备寄存器是无符号类型你传入有符号的负值也会报03。3. 实操过程与核心环节实现3.1 工具选型从串口助手到专业调试软件的取舍调试MODBUS工具选对等于成功了一半。我调试过很多项目工具用过不少各有优劣。串口调试助手如SSCOM是最基础的。它的优点是轻量、免费、门槛低缺点是你要手动拼帧、手动解析响应效率很低。而且SSCOM这类工具不会自动计算CRC也不支持MODBUS协议层的解析只适合做最原始的字节收发测试。专业一点的MODBUS调试工具比如Modbus Poll主站模拟和Modbus Slave从站模拟功能就强大多了。它们支持图形化配置寄存器地址、功能码、数量自动计算CRC还能以表格形式显示寄存器值省去了手动解析的麻烦。Modbus Poll配合虚拟串口可以在没有真实硬件的情况下模拟整个通信链路这个在做上位机开发时非常好用你可以先用Modbus Slave模拟从站设备把上位机逻辑调通再去现场联调真实设备。如果你在做嵌入式开发需要在裸机或RTOS环境里调试MODBUS协议栈那串口抓包工具是刚需。用USB转串口模块并联在总线上被动监听主从通信的原始字节流可以看到协议栈实际发出去的内容和收到的内容。这个对排查协议栈Bug特别有效因为代码里调试信息再多也不如亲眼看到原始帧准确。另外如果你的设备支持MODBUS TCP那调试就更方便了。直接用网络调试助手就能连上不需要串口工具也没有波特率和校验位的概念。唯一的坑是有些设备出厂默认关闭MODBUS TCP功能需要在设备配置界面里打开。3.2 实操演示5分钟从零调通一个MODBUS RTU设备这里我用一个典型的调试案例来演示完整流程。假设你手里有一个支持MODBUS RTU的温湿度传感器默认从站地址1波特率9600无校验。你的目标是用PC读取它当前温度值。第一步确认硬件连接。传感器A/B线对应RS485的A/B通过USB转RS485模块连接到PC。注意RS485是差分信号A和B不能接反。接反了也能收到数据但经常是乱码因为差分信号反相后逻辑电平完全反了。第二步打开串口调试助手设置串口参数波特率9600、数据位8、停止位1、无校验。打开串口先手动发送一个读保持寄存器的请求帧。如果不知道寄存器地址先用01 03 00 00 00 02 C4 0B读取0x0000开始的2个寄存器试试。这条命令的意思是读取地址1的设备从寄存器0x0000开始读取2个寄存器。如果设备正常你会收到类似01 03 04 0A 0F 00 64 9A B1的响应。分析一下01是从站地址03是功能码04表示后面有4个字节数据因为2个寄存器就是4个字节。0A 0F和00 64分别是两个寄存器的值9A B1是CRC。第三步解析数据。以这个温湿度传感器为例假设手册说明温度存储在前两个寄存器温度值是补码形式分辨率0.01度。0A 0F转十进制就是2575乘以0.01就是25.75度符合常理。湿度也存在后面两个寄存器按同样方法解析。第三步有一个分支情况如果返回异常码02说明寄存器地址不对你需要查手册确认温度寄存器的实际地址。如果返回异常码01说明功能码不对也许这个设备温度值在输入寄存器区而不是保持寄存器区那你就改用04功能码读取试试。第四步用MODBUS调试工具配置周期读取确认通信稳定。这一步很重要因为手动发一帧能成功不代表通信可靠。用Modbus Poll配置好寄存器读取设置按100ms间隔连续读10分钟观察是否出现超时、CRC错误或数据突变。如果一切正常说明链路稳定可以进入开发阶段。3.3 嵌入式端的MODBUS协议栈实现要点如果你的项目需要在MCU上实现MODBUS从站协议栈而不是用上位机调试有几个要点分享给你。第一个是串口帧接收的超时判断。RTU模式要求两次字节接收间隔不能超过1.5个字符时间如果超过这个时间就认为一帧数据接收完成。实现方式一般是串口接收中断加一个定时器每收到一个字节就重置定时器定时器超时通常是3.5个字符时间就触发帧接收完成的回调。用定时器而不是简单的延时是因为MS级别的延时在中断里是灾难。第二个是CRC的实现。MODBUS CRC16的算法网上到处都是但不是说你复制过来就能直接用。建议用查表法实现速度比逐位计算快很多。我用的是常见的CRC16-MODBUS查表法初始值0xFFFF多项式0xA001。这个算法本身没错但要注意代码里低位先处理的细节写错一个地方CRC就算不对。第三个是从站状态机的设计。完整的从站协议栈要处理空闲、接收、解析、响应、发送等多个状态。我建议把协议解析和业务逻辑解耦协议栈只负责解析收到的帧提取出功能码、寄存器地址和数据然后通过回调函数把请求交给业务层处理业务层填充响应数据后协议栈负责组帧发送。这样的架构后期换MCU平台或增加功能码时改动量最小。第四个是广播地址的处理。从站地址0是广播地址所有从站都要接收但不响应。如果你用到了广播注意设备收到广播帧后只需要执行写入操作不需要发送响应帧。很多人在实现时忘了这个细节导致广播帧发送后从站也发响应直接把总线搞乱。3.4 上位机和调试工具的实操配置细节如果你需要开发上位机去读取MODBUS设备我建议直接用libmodbus这个开源库支持RTU和TCP两种模式C语言实现跨平台。它在Windows和Linux上都能跑而且API设计得很人性化几十行代码就能实现一个简单的数据读取功能。libmodbus的基本用法就四步创建MODBUS对象、连接RTU模式打开串口TCP模式建立TCP连接、读取或写入寄存器、关闭连接。RTU模式下要设置串口参数包括设备名、波特率、校验位、数据位、停止位。TCP模式下只要设置IP地址和端口默认502。调试连接时如果libmodbus返回-1用modbus_strerror(errno)查看错误信息非常关键。最常见的错误是“I/O error”这大概率是链路问题——没接好线、串口被占用或者设备没通电。如果错误是“No response received from the slave”说明链路通但设备没响应就要检查从站地址、波特率和寄存器配置了。实际写上位机时读取的数据最好封装一层不要直接拿裸寄存器值去算工程值。比如温度寄存器值是2575除以100才是25.75度这个换算逻辑建议集中放在一个函数里不要散落在各处。后面如果还有别的设备或别的协议也很容易复用。4. 调试进阶与常见问题排查实录4.1 从零开始调试时5分钟手工验证链路是否正常这个土办法我用了好多年非常有效。目的就一个排除一切软件干扰确认物理链路和设备基本功能正常。第一步用串口调试助手打开对应串口参数设为9600-8-N-1。然后手动发送一帧最简单的读请求比如01 03 00 00 00 01 C4 0B。如果设备有响应说明链路、地址、波特率、功能码、寄存器地址基本没问题。第二步把波特率改成19200、38400甚至57600再试。如果某个波特率下设备有响应说明设备支持该波特率如果所有波特率都没响应但9600能通说明设备只支持9600。此法可以快速定位波特率不匹配问题。第三步为了验证CRC是否正确故意修改请求帧里的任意一个字节。比如改成02 03 00 00 00 01 84 0B从站地址变2看设备是否返回异常码。如果返回异常码说明CRC处理逻辑是通的设备能正确解析帧如果完全没响应要么设备在0地址要么CRC校验逻辑在你这边不对。这个5分钟手工验证法帮我排除了无数次“以为是代码问题结果发现是USB转串口模块坏了”的尴尬情况。物理链路是一切调试的基础这个步骤千万别跳。4.2 排查总线冲突和从站无响应的实用技巧总线冲突在RS485多设备组网时很常见。现象就是主机发一个请求总线上会出现两个设备同时响应的乱帧。排查时先看所有从站的拨码地址是否重复。如果地址不重复再用示波器或逻辑分析仪看总线波形确认是否有设备在非应答期间占用总线。有一种很隐蔽的情况某个从站设备程序跑飞了或者通信模块异常持续向总线发送数据导致总线上一直有电平跳动其他设备根本无法通信。排查方法就是只留主机和一个从站逐个接入看接入哪个设备后通信就不正常了那就是谁的问题。无响应但总线又不冲突的情况下优先怀疑地址不匹配。比如你发送的目标地址是1但设备实际地址是2设备收到帧后判断不是发给自己的直接丢弃自然不会响应。如果采用Modbus Poll这类调试工具无响应时工具会显示超时。此时先手动发送读请求帧验证链路如果手动发送也没有响应再按刚才的顺序排查。不要一上来就怀疑设备坏了MODBUS设备坏的概率远低于你配置错误的概率。4.3 波特率、校验位、停止位设置错误的表现与识别串口参数错误的表现各有不同别一看到乱码就以为协议栈有问题。我把常见现象和原因整理成了表格方便你对照排查。现象可能原因验证方法完全无响应波特率不匹配或A/B线接反或设备地址不匹配手动发送读请求换波特率逐个试检查接线响应是乱码校验位或数据位配置不对依次试偶校验、无校验、8位、7位偶尔能通偶尔不通停止位不对或帧间隔过短换成2个停止位或降低上位机发送频率响应内容正确但CRC总错帧超时判断不当半帧被拆成两帧调整串口接收超时时间到3.5个字符时间以上其中“响应内容正确但CRC总错”这个最坑。帧内容看着都对偏生CRC校验不过这往往不是数据错而是你接收时把一个完整帧拆成了两段每段各自算CRC自然全错。这就要优化你的串口接收逻辑确保是完整的一帧数据才交出去解析。4.4 寄存器数值解析错乱的典型案例分析我再分享一个实际案例很有代表性。一个变频器项目通过MODBUS RTU读取电流值。手册标注电流寄存器地址0x2000和0x2001数据格式为32位浮点数。我按大端模式解析数据先读到的寄存器为高16位得到的电流值是1.5A但现场钳形电流表实测是150A差了整整100倍。按小端模式解析得到150.2A就与实测值吻合了。这个案例说明两个问题。第一浮点数寄存器的字节序没有统一标准必须通过实测来确认不能想当然。第二排查这种问题时要有一个“参照物”用直流电压源配合精密电流表作为标准修改寄存器里的数值看解析结果是否同步变化。如果变了但倍数不对大概率是字节序问题如果完全不变可能是地址错了。还有一个跟数值解析类似的坑负数在寄存器里的表示。很多传感器手册写“温度为带符号整数分辨率0.1”那负温度在寄存器里就是补码形式比如-5度对应寄存器值65531无符号视角或-5有符号视角。如果你用无符号类型去读会得到65531而不是-5显示设备直接跳到一个巨大的数值。所以读寄存器时最终转工程值时一定要按手册指定的数据类型来。4.5 常见问题速查表最后把调试MODBUS过程中最常见的问题整理成一张速查表方便后期排查问题现象排查优先级具体操作发请求后无响应1手动发送原始帧验证物理链路和设备在线无响应2检查从站地址是否与设备一致无响应3尝试不同波特率确认单参数匹配收到乱码1检查A/B线是否接反校验位和数据位配置收到异常码021检查寄存器地址是否超范围确认协议地址和PLC地址换算收到异常码011确认设备支持的功能码检查写入功能是否被禁用收到异常码031检查请求中的寄存器数量或写入数据值是否合法CRC总是错误1优化串口接收超时判断确保整帧接收数据值合理但差倍数1确认字节序大端/小端和数据类型有符号/无符号/浮点数据偶尔跳变1检查RS485总线的终端电阻是否匹配屏蔽和接地是否规范多设备组网冲突1检查从站地址是否重复是否有设备异常抢占总线围绕这张表基本覆盖了我在MODBUS调试中碰到的95%的情况。5. 写在工程笔记末尾的几条个人心得调试MODBUS协议三年最大的心得就是协议本身不算难难的是它和真实物理世界的接口。RS485的电平、现场干扰、接地、终端电阻这些看似与协议无关的东西往往是通信不稳定的真正原因。协议栈写得再完美线没接好一样白搭。还有一个感受想分享给刚入门的朋友调试工具一定要舍得花时间去熟悉。串口助手、Modbus Poll、逻辑分析仪、示波器每个工具都有它的使用场景。我见过不少同事代码写了两个月结果不会用调试工具浪费了大量时间在无意义的猜测上。最后想说的是MODBUS这个协议虽然老效率也不算高但它的简单、稳定、开放让它在工业领域至今依然是事实标准。与其纠结它够不够先进不如花时间把调试方法论沉淀下来。这篇文章里的排查思路换个协议一样适用——先链路再参数后数据这个顺序永远不会错。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

深入解析mbed OS:从HAL层到RTOS内核的嵌入式系统源码剖析 2026/9/6 10:11:43

深入解析mbed OS:从HAL层到RTOS内核的嵌入式系统源码剖析

1. 这个项目到底在看什么1.1 先搞清楚 mbed OS 是什么,以及为什么要读它的源码mbed OS 是 Arm 官方推出的物联网嵌入式操作系统,面向 Cortex-M 系列微控制器,内置了实时操作系统内核、HAL 硬件抽象层、设备驱动框架和完整的测试体系。简单说&…

阅读更多 →
无sudo环境下用RIOT OS native模式跑通网络吞吐测试 2026/9/6 10:11:43

无sudo环境下用RIOT OS native模式跑通网络吞吐测试

1. 为什么会在没有 sudo 的环境里折腾 RIOT1.1 受管 Linux 环境下的真实痛点先说背景。我手头这台 Ubuntu 机器不是自己的实验室主机,而是公司统一运维的受管服务器,账号本身在sudo组里,但每次执行sudo apt install都会弹出“该操作需管理员审…

阅读更多 →
Linux Platform总线机制与设备树匹配:i.MX6ULL驱动开发核心解析 2026/9/6 10:11:43

Linux Platform总线机制与设备树匹配:i.MX6ULL驱动开发核心解析

1. Platform总线机制到底解决了什么问题做嵌入式Linux驱动开发,绕不开i.MX6ULL这颗芯片。它是NXP(原Freescale)的Cortex-A7系列处理器,在工业控制、物联网网关、教学开发板这些场景里出镜率极高。用这颗芯片写驱动,最常…

阅读更多 →
tmux 会话管理实战:让 AI 编程长任务不再因断线而丢失 2026/9/6 10:11:43

tmux 会话管理实战:让 AI 编程长任务不再因断线而丢失

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
i.MX6ULL设备树与Platform驱动匹配机制详解 2026/9/6 10:11:43

i.MX6ULL设备树与Platform驱动匹配机制详解

上周帮朋友调一块 i.MX6ULL 的板子,遇到一个很典型的问题:驱动代码 insmod 进去之后,dmesg 干干净净,probe 根本没跑。查了半天,最终问题出在设备树节点 compatible 跟 of_match_table 里写的不一致。这类问题在嵌入式…

阅读更多 →
sprint boot 使用XML方式实现操作数据库 2026/9/6 10:08:43

sprint boot 使用XML方式实现操作数据库

前面我们已经学习使用MyBatis-Plus依赖实现操作数据库,MyBatis-Plus还支持XML文件来操作数据库,一般适合于复杂的SQL操作 spring boot使用MyBatis-Plus依赖实现操作数据库-CSDN博客 spring boot 实现数据库分页操作-CSDN博客 前期的基础配置信息参考上…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞