在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语句发送到数据库执行  | 
以上,如有问题欢迎提出!

