JAVA开发MSSQL批量操作返回行数为负的原因及解决方法原创
金蝶云社区-依然如昨
依然如昨
25人赞赏了该文章 259次浏览 未经作者许可,禁止转载编辑于2024年02月05日 08:11:22

    网上的框架springboot+mybaits plus,这个框架很早前开发过另外一个系统,目前在开发工序报工系统。业务功能开发完成后,往系统里增加用户、角色等信息的时候总是报“操作失败”,然后到后台一看,数据其实是保存的。

    这我就有点丈二和尚摸不着头脑了,框架这里的代码包括数据库结构我都没动过,而且无论是新增还是修改还是删除,无论是用户还是菜单等等每次操作都报“操作失败”...

    看了日志好像也没有error信息,跟踪调试也没跳到错误处理,检查了前端代码确定是后端带过来的错误消息,人麻了,把mapper、xml里的sql,service,impl挨个打开检查语句代码,实在没看出什么问题。

    后来一次在跟踪代码的时候发现它的返回语句外面套了一个方法(以前调试直接跳过这个方法体了),去方法里一看,原来在检查批量insert、delete的返回行数(框架里用的xml中动态SQL ,foreach批量插入或删除),可既然保存都成功了,那返回行数不应该>0吗?结果一看返回结果行数居然是一个超级大的负数...

    去网上找了很久,找到了原因:

    获取mybatis的update和insert行数,总是返回负数-2147482646。是由于defaultExecutorType的引起的,defaultExecutorType有三个执行器SIMPLE、REUSE和BATCH。其中BATCH可以批量更新操作缓存SQL以提高性能,但是有个缺陷就是无法获取update、delete返回的行数。defaultExecutorType的默认执行器是SIMPLE。

    因此只要将defaultExecutorType的值改成SIMPLE就能正确返回行数了。

    去mybaits配置文件一看,果然这个是BATCH...才想起来在做业务功能的时候想从类的映射里批量插入明细行,不要用for循环去insert,所以网上找了一些方法,把这个配置加上去了,结果因为mybatis plus版本问题,批量插入没用起来,但是忘了把这个配置去掉了...

    果然改回SIMPLE后,用户、菜单等维护功能全部都正常了。


图标赞 25
25人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0