1. 程式人生 > >Mybatis執行Update返回行數為負數

Mybatis執行Update返回行數為負數

獲取mybatis的update行數,總是返回負數。後來在官網上找到原因,是由於defaultExecutorType的引起的,defaultExecutorType有三個執行器SIMPLE、REUSE和BATCH。其中BATCH可以批量更新操作快取SQL以提高效能,但是有個缺陷就是無法獲取update、delete返回的行數。defaultExecutorType的預設執行器是SIMPLE。

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



由於專案配置中啟用了BATCH執行器,UPDATE和DELETE返回的行數就丟失了,把執行器改為SIMPLE即可。

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!-- 全域性對映器啟用快取 -->
<setting name="cacheEnabled" value="true" /> <!-- 查詢時,關閉關聯物件即時載入以提高效能 --> <setting name="lazyLoadingEnabled" value="true" /> <!-- 設定關聯物件載入的形態,此處為按需載入欄位(載入欄位由SQL指 定),不會載入關聯表的所有欄位,以提高效能 --> <setting name="aggressiveLazyLoading" value="false"
/>
<!-- 對於未知的SQL查詢,允許返回不同的結果集以達到通用的效果 --> <setting name="multipleResultSetsEnabled" value="true" /> <!-- 允許使用列標籤代替列名 --> <setting name="useColumnLabel" value="true" /> <!-- 允許使用自定義的主鍵值(比如由程式生成的UUID 32位編碼作為鍵值),資料表的PK生成策略將被覆蓋 --> <setting name="useGeneratedKeys" value="true" /> <!-- 給予被巢狀的resultMap以欄位-屬性的對映支援 --> <setting name="autoMappingBehavior" value="FULL" /> <!-- 對於批量更新操作快取SQL以提高效能 --> <!-- defaultExecutorType設定為BATCH有個缺陷就是無法獲取update、delete返回的行數 --> <!-- <setting name="defaultExecutorType" value="BATCH" />--> <!-- 資料庫超過25000秒仍未響應則超時 --> <setting name="defaultStatementTimeout" value="25000" /> <!-- 日誌 --> <!-- <setting name="logImpl" value="SLF4J"/> --> </settings> <!-- 註冊mybatis外掛 --> <plugins> <!-- mysql分頁外掛 --> <plugin interceptor="com.rvho.mybatis.interceptor.MybatisPageInterceptor"> <property name="databaseType" value="mysql"/> </plugin> </plugins> </configuration>