一、问题现象:
当我们在使用Mybatis时,然后在加入事务后,在这个时候如果需要插入一条数据后,返回主键ID,如图:
有时会出现如下图的情况:
结果会造成数据插入失败。
二、问题解决:
经过查找官网API说明,发现Mybatis配置中有一项为,defaultExecutorType,如图:
此处的值为:BATCH,BATCH执行器可以重复执行语句和批量更新。其产生的后果是,不会每条SQL语句单独执
行,而是一次性批量执行,这样就会导致,在想要实现插入一条数据,返回主键ID时,会请求失败,无法返回,造成
整个事务失败然后回滚。
defaultExecutorType还有其他选项:SIMPLE 执行器执行其它语句。REUSE 执行器可能重复使
用preparedstatements 语句。
经过更改defaultExecutorType执行器选项为SIMPLE 后,如图:
更改后重新运行程序发现插入一条数据后,返回主键ID的请求成功,如图:
至此,在有事务的情况下,将defaultExecutorType选项设置为SIMPLE,插入数据后,便可返回主键ID。