mybatis-plus解决 sqlserver批量插入list报错

mybatis-plus解决 sqlserver批量插入list报错,第1张

解决版本:3.0.6

原因分析:mybatis-plus默认使用Jdbc3KeyGenerator进行添加,但是sqlserver不支持批量返回id,所以会抛出如下异常

解决方案: 重写默认saveBatch和saveOrUpdateBatch(缺点是批量添加不能返回id,对于不需要返回id的场景适用)将Jdbc3KeyGenerator替换为NoKeyGenerator

第一步: 建立NoahSqlMethod(也可以不写,但是项目尽量不出现魔法值)

第二步: 建立InsertBatch对象

第三步: 建立NoahSqlInjector对象

第四步: 重写ServiceImpl超类为AbstractNoahServiceImpl

第五步: 将业务service继承类改为AbstractNoahServiceImpl

第六步: 将SqlInjector注入系统中

用EXEC执行字符串的形式就可以!

如下:

DECLARE @databaseName NVARCHAR(20)

DECLARE @deviceName NVARCHAR(30)

DECLARE @SQL NVARCHAR(1000)

SET @databaseName = 'table'

SET @deviceName = @databaseName + '_device'

SET @SQL='ALTER DATABASE ' + @databaseName + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE'

EXEC ( @SQL)

SET @SQL='RESTORE database ' + @databaseName + ‘ FROM @deviceName WITH RECOVERY’

EXEC ( @SQL)

在一个查询语句里,不能有重名的参数。在第一个图里循环添加了几次name参数,所以报错。而且你这么写也达不批量写入的目的,因为你只执行了一次插入 *** 作。

解决方法一,把最后一句代码放到for循环里,在后面再加一句lsp.Clear()

方法二,sqlserver批量写入可以使用SqlBulkCopy来做,一条一条插性能太差

如用不懂,欢迎追问


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11668375.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存