最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis執(zhí)行Update返回行數(shù)為負(fù)數(shù)的問題

 更新時(shí)間:2021年12月02日 12:00:28   作者:趕路人兒  
這篇文章主要介紹了Mybatis執(zhí)行Update返回行數(shù)為負(fù)數(shù)的問題,具有很好的參考價(jià)值,希望大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mybatis執(zhí)行Update返回行數(shù)為負(fù)數(shù)

獲取mybatis的update行數(shù),總是返回負(fù)數(shù)。

在官網(wǎng)上找到原因

是由于defaultExecutorType的引起的,defaultExecutorType有三個(gè)執(zhí)行器SIMPLE、REUSE和BATCH。

其中BATCH可以批量更新操作緩存SQL以提高性能,但是有個(gè)缺陷就是無法獲取update、delete返回的行數(shù)。defaultExecutorType的默認(rèn)執(zhí)行器是SIMPLE。

名稱 描述
SIMPLE 執(zhí)行器執(zhí)行其它語句
REUSE 可能重復(fù)使用prepared statements 語句
BATCH 可以重復(fù)執(zhí)行語句和批量更新

由于項(xiàng)目配置中啟用了BATCH執(zhí)行器,UPDATE和DELETE返回的行數(shù)就丟失了,把執(zhí)行器改為SIMPLE即可。

通過查看源碼可以發(fā)現(xiàn),batch執(zhí)行器返回的是最大批量執(zhí)行條數(shù):

public static final int BATCH_UPDATE_RETURN_VALUE = Integer.MIN_VALUE + 1002; 
public int doUpdate(MappedStatement ms, Object parameterObject) throws SQLException {
    final Configuration configuration = ms.getConfiguration();
    final StatementHandler handler = configuration.newStatementHandler(this, ms, parameterObject, RowBounds.DEFAULT, null, null);
    final BoundSql boundSql = handler.getBoundSql();
    final String sql = boundSql.getSql();
    final Statement stmt;
    if (sql.equals(currentSql) && ms.equals(currentStatement)) {
      int last = statementList.size() - 1;
      stmt = statementList.get(last);
      BatchResult batchResult = batchResultList.get(last);
      batchResult.addParameterObject(parameterObject);
    } else {
      Connection connection = getConnection(ms.getStatementLog());
      stmt = handler.prepare(connection);
      currentSql = sql;
      currentStatement = ms;
      statementList.add(stmt);
      batchResultList.add(new BatchResult(ms, sql, parameterObject));
    }
    handler.parameterize(stmt);
    handler.batch(stmt);
    return BATCH_UPDATE_RETURN_VALUE;
  }
<?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" />
        <!-- 查詢時(shí),關(guān)閉關(guān)聯(lián)對(duì)象即時(shí)加載以提高性能 -->
        <setting name="lazyLoadingEnabled" value="true" />
        <!-- 設(shè)置關(guān)聯(lián)對(duì)象加載的形態(tài),此處為按需加載字段(加載字段由SQL指 定),不會(huì)加載關(guān)聯(lián)表的所有字段,以提高性能 -->
        <setting name="aggressiveLazyLoading" value="false" />
        <!-- 對(duì)于未知的SQL查詢,允許返回不同的結(jié)果集以達(dá)到通用的效果 -->
        <setting name="multipleResultSetsEnabled" value="true" />
        <!-- 允許使用列標(biāo)簽代替列名 -->
        <setting name="useColumnLabel" value="true" />
        <!-- 允許使用自定義的主鍵值(比如由程序生成的UUID 32位編碼作為鍵值),數(shù)據(jù)表的PK生成策略將被覆蓋 -->
        <setting name="useGeneratedKeys" value="true" />
        <!-- 給予被嵌套的resultMap以字段-屬性的映射支持 -->
        <setting name="autoMappingBehavior" value="FULL" />
        <!-- 對(duì)于批量更新操作緩存SQL以提高性能 -->
        <!-- defaultExecutorType設(shè)置為BATCH有個(gè)缺陷就是無法獲取update、delete返回的行數(shù) -->
        <!-- <setting name="defaultExecutorType" value="BATCH" />-->
        <!-- 數(shù)據(jù)庫超過25000秒仍未響應(yīng)則超時(shí) -->
        <setting name="defaultStatementTimeout" value="25000" />
        <!-- 日志 -->
        <!-- <setting name="logImpl" value="SLF4J"/> -->
    </settings>
 
    <!-- 注冊(cè)mybatis插件 -->
    <plugins>
        <!-- mysql分頁插件 -->
        <plugin interceptor="com.rvho.mybatis.interceptor.MybatisPageInterceptor">
            <property name="databaseType" value="mysql"/>
        </plugin>
    </plugins>
</configuration>

Mybatis Update返回值

mybatis sql:

<update id="test" parameterType="map">
        update test_0731 set name = #{params.name}, age = #{params.age} where id = ${params.id}
    </update>

對(duì)應(yīng)的java程序打印數(shù)字

(1)確實(shí)更新了某些字段的值

表數(shù)據(jù):

提交的數(shù)據(jù):更新id為1的記錄,

返回的值是1,表示一條被更改

(2)被update但是update前后的數(shù)據(jù)是一樣的

繼續(xù)發(fā)送這個(gè),數(shù)據(jù),前后的數(shù)據(jù)一樣

發(fā)現(xiàn)雖然沒影響到值,但是返回的值還是1。

(3) 沒有匹配任何數(shù)據(jù)

請(qǐng)求的數(shù)據(jù)如下:

此時(shí)id為2,返回的數(shù)字是0。

所以u(píng)pdate返回值是指match匹配到,而執(zhí)行update語句的數(shù)量。

update返回值也是可以為boolean類型,當(dāng)返回值為0時(shí)對(duì)應(yīng)的boolean類型就是false, 如果不為零就是返回true

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

尖扎县| 曲阳县| 阿拉善左旗| 石城县| 闽侯县| 澄城县| 昆山市| 罗源县| 盐城市| 大厂| 伊宁市| 建平县| 常德市| 泰和县| 松原市| 秦皇岛市| 绥宁县| 中西区| 岗巴县| 彝良县| 合川市| 锦屏县| 苍溪县| 龙川县| 宜春市| 河东区| 遂宁市| 西和县| 荣成市| 库尔勒市| 巩留县| 清徐县| 滨海县| 临洮县| 寿阳县| 阿荣旗| 宜州市| 湟中县| 双辽市| 沙洋县| 西丰县|