问题是在Spring Web应用程序中使用MyBatis。我需要在我的应用程序中执行批处理sql语句(例如批量插入)。从我使用MyBatisBatchItemWriter
中的批处理功能阅读的有关SqlSessionTemplate
类的文档中。激活此功能会影响依赖它的其他映射器吗?定义另一个专用于BATCH语句的SqlSessionTemplate
是否明智?比如下面提供的代码?
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
">
<tx:annotation-driven transaction-manager="txManager" />
<!--
a PlatformTransactionManager is still required -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- (this dependency is defined somewhere else) -->
<property name="dataSource" ref="datasourceref" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="${mpi.datasource.type}" />
<property name="configLocation" value="/WEB-INF/x1v1-mybatisconfig.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory" />
</bean>
<bean id="batchSqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
<constructor-arg index="1" value="BATCH" />
</bean>
</beans>
答案 0 :(得分:1)
使用批处理执行程序类型可能与某些服务相关,而与其他服务无关。 然后它似乎是一个好主意,因为它使事情变得更清楚:当你知道为什么而不使用批处理时使用批处理。因为批处理效果可能令人费解:如果您调试代码,批处理语句在到达代码行时实际上并未执行,它们将以某种方式安排在下一次刷新时实际执行,由中间select语句显式触发或隐式执行(默认行为)。请记住,行为将持续会话时间,这是一个独特的(隔离的)会话。