解決因爲設置BatchExecutor批量執行器而致使沒法獲取自增Id的問題

在Mybatis中有三種Executor:spring

  • SimpleExecutor -- SIMPLE 就是普通的執行器。
  • ReuseExecutor -執行器會重用預處理語句(prepared statements)
  • BatchExecutor --它是批量執行器

這些就是Mybatis的三種執行器。你能夠經過配置文件的settings裏面的元素defaultExecutorType,配置它,默認是採用SimpleExecutor若是你在Spring運用它,那麼你能夠這麼配置它:sql

<bean id="sqlSessionTemplateBatch" class="org.mybatis.spring.SqlSessionTemplate">     
<constructor-arg index="0" ref="sqlSessionFactory" />  
<!--更新採用批量的executor -->  
<constructor-arg index="1" value="BATCH"/>  
</bean>

或者在Spring Boot的屬性文件中配置:數據庫

mybatis.executor-type=BATCH

若是你在事務中有這麼一段代碼:mybatis

Media media = new Media();
media.setTitle("默認用戶頭像");
media.setMediaType(0);
media.setUrl(defaultAvatarUrl);
mediaMapper.insert(media);
logger.info("mediaId : " + media.getId());
User user = new User();
user.setMedia(media);
userMapper.insert(user);

那麼就會致使Media沒法獲取插入數據庫後的id。app

這時,只須要修改Executor爲其它兩種便可:code

<bean id="sqlSessionTemplateBatch" class="org.mybatis.spring.SqlSessionTemplate">     
<constructor-arg index="0" ref="sqlSessionFactory" />  
<!--更新採用批量的executor -->  
<constructor-arg index="1" value="SIMPLE"/>  
</bean>

或者在Spring Boot的屬性文件中配置:事務

mybatis.executor-type=SIMPLE

以上get

相關文章
相關標籤/搜索