mybatis-plus解决 sqlserver批量插入list报错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis-plus解决 sqlserver批量插入list报错相关的知识,希望对你有一定的参考价值。
参考技术A 解决版本:3.0.6
原因分析:mybatis-plus默认使用Jdbc3KeyGenerator进行添加,但是sqlserver不支持批量返回id,所以会抛出如下异常
解决方案: 重写默认saveBatch和saveOrUpdateBatch(缺点是批量添加不能返回id,对于不需要返回id的场景适用)将Jdbc3KeyGenerator替换为NoKeyGenerator
第一步: 建立NoahSqlMethod(也可以不写,但是项目尽量不出现魔法值)
第二步: 建立InsertBatch对象
第三步: 建立NoahSqlInjector对象
第四步: 重写ServiceImpl超类为AbstractNoahServiceImpl
第五步: 将业务service继承类改为AbstractNoahServiceImpl
第六步: 将SqlInjector注入系统中
T-SQL:批GO使用实例(十四)
批是由客户端应用程序作为一个单元发送给SQL Server 执行的一条或多条语句 如果批中出现错误就整个批都不会交给SQL SERVER 执行
PRINT ‘第一批‘;GO -- Invalid batch PRINT ‘第二批‘; SELECT custid FROM Sales.Customers; SELECT orderid FOM Sales.Orders; GO -- Valid batch PRINT ‘第三批‘; SELECT empid FROM HR.Employees;
一起执行会发现第二批出现错误就没有提交执行
批由GO命令 隔断
DECLARE @i AS INT = 10; -- Succeeds PRINT @i; GO -- Fails PRINT @i; GO
Go 隔断了 @i 变量 就会报错
例如还有一种情况
IF OBJECT_ID(‘Sales.MyView‘, ‘V‘) IS NOT NULL DROP VIEW Sales.MyView; CREATE VIEW Sales.MyView AS SELECT YEAR(orderdate) AS orderyear, COUNT(*) AS numorders FROM Sales.Orders GROUP BY YEAR(orderdate); GO
CREATE VIEW Sales.MyView
AS
create view 必须是批中第一个语句 所以 在create view 前面 加 go命令 进行截断
还有 在同一批中更改架构 会出现错误 需要放到两个批中
CREATE TABLE dbo.T1(col1 INT); GO -- Following fails ALTER TABLE dbo.T1 ADD col2 INT; SELECT col1, col2 FROM dbo.T1; GO
也可以用GO 循环运行批如:
print ‘1123‘ GO 5
可以用来批量新增语句
以上是关于mybatis-plus解决 sqlserver批量插入list报错的主要内容,如果未能解决你的问题,请参考以下文章
springboot mybatis-plus 调用 sqlserver 的 存储过程 返回值问题
springboot+mybatisplus+sqlserver(2008SR)整合分页问题
Spring boot + mybatis-plus 遇到 数据库字段 创建不规范 大驼峰 下划线 导致前端传参数 后端收不到参数 解决方案