在Mybatis中有三种Executor:
- SimpleExecutor — SIMPLE 就是普通的执行器。
- ReuseExecutor -执行器会重用预处理语句(prepared statements)
- BatchExecutor —它是批量执行器
这些就是Mybatis的三种执行器。你可以通过配置文件的settings里面的元素defaultExecutorType,配置它,默认是采用SimpleExecutor如果你在Spring运用它,那么你可以这么配置它:
| 1 | <bean id="sqlSessionTemplateBatch" class="org.mybatis.spring.SqlSessionTemplate"> | 
或者在Spring Boot的属性文件中配置:
| 1 | mybatis.executor-type=BATCH | 
如果你在事务中有这么一段代码:
| 1 | Media media = new Media(); | 
那么就会导致Media无法获取插入数据库后的id。
这是由于设置了executorType=BATCH而导致执行更新Sql时Mybatis没有提交语句到数据库。
这时有两种解决方法:
方法1:
只需要修改Executor为其它两种SIMPLE or REUSE即可:
| 1 | <bean id="sqlSessionTemplateBatch" class="org.mybatis.spring.SqlSessionTemplate"> | 
或者在Spring Boot的属性文件中配置:
| 1 | mybatis.executor-type=SIMPLE | 
方法2:
在insert方法之后执行:
| 1 | // 刷新批量更新语句缓存,将Sql语句发送到数据库执行 | 
以上,如有问题欢迎提出!

