JAVA开发MSSQL批量操作返回行数为负的原因及解决方法

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

JAVA开发MSSQL批量操作返回行数为负的原因及解决方法

    网上的框架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后,用户、菜单等维护功能全部都正常了。


JAVA开发MSSQL批量操作返回行数为负的原因及解决方法

网上的框架springboot+mybaits plus,这个框架很早前开发过另外一个系统,目前在开发工序报工系统。业务功能开发完成后,往系统里增加...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息