springMVC+mybatis 增刪改操作後判斷影響行數一直返回-2147482646
阿新 • • 發佈:2019-02-02
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