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