Mybatis 更新時返回值是負數,但數據更新成功問題分析解決


今天碰到一個問題:mybatis 更新時。雖然數據更新成功了,但是返回值是負數(-2147482646),影響了到了程序里面業務的進行,經過分析查閱測試,做如下總結:
Mybatis 內置的 ExecutorType 有3種 SIMPLE [默認], BATCH REUSE SimpleExecutor : 該模式下每執行一次update或select,就開啟一個Statement對象,用完立刻關閉Statement對象。(可以是Statement或PrepareStatement對象)。 BatchExecutor : 執行update(沒有select,JDBC批處理不支持select),將所有sql都添加到批處理中(addBatch()),等待統一執行(executeBatch()),它緩存了多個Statement對象,每個Statement對象都是addBatch()完畢后,等待逐一執行executeBatch()批處理的;BatchExecutor相當於維護了多個桶,每個桶里都裝了很多屬於自己的SQL,就像蘋果藍里裝了很多蘋果,番茄藍里裝了很多番茄,最后,再統一倒進倉庫。(可以是Statement或PrepareStatement對象)。 ReuseExcutor : 執行update或select,以sql作為key查找Statement對象,存在就使用,不存在就創建,用完后,不關閉Statement對象,而是放置於Map<String, Statement>內,供下一次使用。(可以是Statement或PrepareStatement對象)。 原因分析:返回負數,是由於org.mybatis.spring.SqlSessionTemplate類 中的ExecutorType 設置的引起的,檢查下自己的SqlSessionTemplate bean 配置是不是配置成了 BATCH,如果是請繼續往下看。
解決方式: 在 Spring 配置文件中,做如下修改
<!-- 通用session模板 -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
    <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
    <constructor-arg name="executorType" value="SIMPLE"></constructor-arg>
    <!--   配置一個可以執行批量的sqlSession, 其中BATCH可以批量更新操作緩存SQL以提高性能,但是有個缺陷就是無法獲取update、delete返回的行數-->
    <!--   <constructor-arg name="executorType" value="BATCH"></constructor-arg>-->
</bean>

 

另外提一點:
在默認情況下,mybatis 的 update 操作返回值是記錄的 matched 的條數,並不是影響的記錄條數。mybatis 僅僅只是返回的數據庫連接驅動(通常是 JDBC )的返回值,也就是說返回值並不一定是受影響的數據條數。 我們可以通過對 JDBC URL 顯式的指定 useAffectedRows 選項,我們將可以得到受影響的記錄的條數: jdbc:mysql://${jdbc.host}/${jdbc.db}?useAffectedRows=true 例如: jdbc:mysql://localhost:3306/test?useAffectedRows=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false

 

 

 

轉 : https://blog.csdn.net/HSH205572/article/details/93403886

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM