我们公司有自己的API处理mybatis的update,我做开发基本都使用这个API,但是看了源码发现,如果是批量处理update的话,也只是代码里做的循环逐条update,并不是在一个sql语句中批量处理。这样的处理,如果批量更新的数据比较大时,性能将会大大降低,所以组长就要求我对系统里有批量更新处理的部分进行优化。
当接到这个需求的时候,我脑子里就有了一个清晰的思路,只用一句sql进行批量处理,很直接很简单就想到了sql关键字in,只需要代码里获取需要更新的数据的主键值,以列表形式入参到mybatis,很原始很低级也很有效的处理方式。
在这里面有一个关键的地方就是必须要判断入参的列表是否为空,在mysql里,in后面是空的话,将会处理全量表,正是因为自己忽略了这个判断,更新全量表的,并且引起程序假死,系统的主业务流程崩溃,给客户造成了经济损失,还被客户一纸声明投诉过来,真的是很愧疚。