1. 程式人生 > >springMVC+mybatis 增刪改操作後判斷影響行數一直返回-2147482646

springMVC+mybatis 增刪改操作後判斷影響行數一直返回-2147482646

MyBatis發現更新和插入返回值一直為"-2147482646"的錯誤是由defaultExecutorType設定引起的,如果設定為BATCH,更新返回值就會丟失。mybatis官方的討論列表,這句很關鍵:“If the BATCH executor is in use, the update counts are being lost. ”

spring/mybtis 配置檔案

<!-- 配置掃描器,將mybatis介面的實現加入到ioc容器中 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 掃描所有dao介面的實現,加入到IOC容器中 -->
		<property name="basePackage" value="com.sevenisland.dao"></property>
	</bean>

	<!-- 配置可以執行批量的sqlSession -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
		<constructor-arg name="executorType" value="BATCH"></constructor-arg>
	</bean>
	<!-- Spring配置檔案的核心點(資料來源/與mybatis整合/事務控制) -->
<!-- 開啟基於註解的事務,使用xml配置形式的事務(主要都是使用配置式) -->
	<!-- 事務控制的配置 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 控制資料來源 -->
		<property name="dataSource" ref="dataSource"></property>
	</bean>

在mybatis裡面有一個配置屬性defaultExecutorType,當這個值為BATCH時, 返回結果就只有-2147482646 這一個值。defaultExecutorType一共有三個值:BATCH, REUSE, SIMPLE。這三個值分別的特點如下:

名稱         描述
SIMPLE     執行器執行其它語句,預設值。
REUSE     可能重複使用prepared statements 語句
BATCH     可以重複執行語句和批量更新    

而解決以上問題的方法就是可以將defaultExecutorType的值改成SIMPLE或REUSE,或者直接刪除該配置就可以了。

就是因為上面設定了 <constructor-arg name="executorType" value="BATCH"></constructor-arg> 這句引起的。去掉即可。

<constructor-arg name="executorType" value="BATCH"></constructor-arg>這是設定如此是想要進行批量操作,但是經測試沒有此處的設定也可進行批量操作。大膽果斷的刪除即可。

參考地址:http://www.cnblogs.com/parryyang/p/5484459.html