springboot mybatis-plus 对接 sqlserver 数据库 批处理的问题
创始人
2024-05-28 18:15:12
0

问题:
在对接 sqlserver数据库的时候 主子表 保存的时候
子表批量保存 使用的 mybatis-plus提供的saveOrUpdateBatch 这个方法
但是 报错
报错内容为 :
com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果。

框架版本
sprin boot 2.0 +
mybatis-plus 3.3.1
mybatis-plus 代码生成器 mybatis-plus-generator: 3.3.2

SQL Server JDBC: mssql-jdbc 版本 :8.4.1.jre8

经过排查后
猜测 应该是 mssql-jdbc 和 mybatis-plus 不兼容把

mssql-jdbc 和 mybatis-plus 都调整的了版本 还是不行

最后我的结论 应该是 mybatis-plus在处理 sqlserver 批处理的时候
没有考虑这种情况
最后也没找到合适的解决方案

最后实现了两种解决方案 仅供参考
方案一:
在使用这个 批处理方法的时候 捕获异常

       // 对于sqlserver    批处理的问题// mybatis-plus 提供的 saveOrUpdateBatch saveBatch 这两个方法啊 经过测试 会报错//   如果非要用 mybatis-plus 的这个 saveOrUpdateBatch 方法// 必须要捕获异常  但是不知道会不会对事务有影响// 稳妥点的方案 批处理 写 xml文件 原生sql 执行 但是写起来麻烦//  xml 文件 放的位置 已经application.yml 配置文件中定义好了try {saveOrUpdateBatch(etMaintain.getEtMaintainsubList());}catch (UncategorizedSQLException e){e.printStackTrace();}

方案二 使用 xml 文件 生成sql 语句 来执行 批量处理

第一步 配置 xml 的存放位置

mybatis-plus:
mapper-locations: classpath:/mapper/*.xml

第二步编写 相对应的xml文件
举例说明
useGeneratedKeys=“true” 这个key 注意一下 网上有说 这个key 也会导致这个问题的出现



INSERT INTO Pr_TransSub ( SPMCNO, SPMCRoutID, SItemName, SProcedureID, SEmplID_Product, SQtys_Plan, SDate)VALUES(#{transSub.spmcno}, #{transSub.spmCRoutID}, #{transSub.sitemName}, #{transSub.sprocedureID},#{transSub.semplidProduct}, #{transSub.sqtysPlan}, #{transSub.sdate})

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...