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

MyBatis批量操作XML的完整實(shí)現(xiàn)方案

 更新時(shí)間:2025年12月19日 09:15:48   作者:Full Stack Developme  
本文介紹了MyBatis通過XML映射文件實(shí)現(xiàn)批量插入、更新和刪除的完整方案,包括單條SQL批量插入、批量插入并返回主鍵、批量更新、批量刪除以及動(dòng)態(tài)批量操作,最后,分享了最佳實(shí)踐建議,需要的朋友可以參考下

MyBatis 通過 XML 映射文件實(shí)現(xiàn)批量插入(insert)、更新(update)和刪除(delete)的完整方案

1. 批量插入(insert)

1.1 單條SQL批量插入(推薦)

<insert id="batchInsert" parameterType="java.util.List">
    INSERT INTO user(name, age, email) VALUES
    <foreach collection="list" item="item" separator=",">
        (#{item.name}, #{item.age}, #{item.email})
    </foreach>
</insert>

1.2 批量插入并返回主鍵(MySQL)

<insert id="batchInsert" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user(name, age, email) VALUES
    <foreach collection="list" item="item" separator=",">
        (#{item.name}, #{item.age}, #{item.email})
    </foreach>
</insert>

1.3 批量插入(Oracle特殊語法)

<insert id="batchInsert">
    INSERT ALL
    <foreach collection="list" item="item">
        INTO user(id, name, age, email) 
        VALUES(#{item.id}, #{item.name}, #{item.age}, #{item.email})
    </foreach>
    SELECT 1 FROM DUAL
</insert>

2. 批量更新(update)

2.1 使用CASE WHEN批量更新(MySQL)

<update id="batchUpdate" parameterType="java.util.List">
    UPDATE user
    <trim prefix="SET" suffixOverrides=",">
        <trim prefix="name = CASE" suffix="END,">
            <foreach collection="list" item="item">
                WHEN id = #{item.id} THEN #{item.name}
            </foreach>
        </trim>
        <trim prefix="age = CASE" suffix="END,">
            <foreach collection="list" item="item">
                WHEN id = #{item.id} THEN #{item.age}
            </foreach>
        </trim>
        <trim prefix="email = CASE" suffix="END">
            <foreach collection="list" item="item">
                WHEN id = #{item.id} THEN #{item.email}
            </foreach>
        </trim>
    </trim>
    WHERE id IN
    <foreach collection="list" item="item" open="(" separator="," close=")">
        #{item.id}
    </foreach>
</update>

2.2 批量更新(Oracle)

<update id="batchUpdate" parameterType="java.util.List">
    <foreach collection="list" item="item" open="BEGIN" close=";END;" separator=";">
        UPDATE user SET
            name = #{item.name},
            age = #{item.age},
            email = #{item.email}
        WHERE id = #{item.id}
    </foreach>
</update>

3. 批量刪除(delete)

3.1 普通批量刪除

<delete id="batchDelete" parameterType="java.util.List">
    DELETE FROM user WHERE id IN
    <foreach collection="list" item="item" open="(" separator="," close=")">
        #{item.id}
    </foreach>
</delete>

3.2 批量刪除(Oracle)

<delete id="batchDelete" parameterType="java.util.List">
    <foreach collection="list" item="item" open="BEGIN" close=";END;" separator=";">
        DELETE FROM user WHERE id = #{item.id}
    </foreach>
</delete>

4. 動(dòng)態(tài)批量操作

4.1 動(dòng)態(tài)批量插入(根據(jù)條件)

<insert id="dynamicBatchInsert">
    INSERT INTO user(name, age, email) VALUES
    <foreach collection="list" item="item" separator=",">
        <if test="item.name != null and item.email != null">
            (#{item.name}, #{item.age}, #{item.email})
        </if>
    </foreach>
</insert>

4.2 批量更新非空字段

<update id="batchUpdateSelective" parameterType="java.util.List">
    UPDATE user
    <trim prefix="SET" suffixOverrides=",">
        <trim prefix="name = CASE" suffix="END,">
            <foreach collection="list" item="item">
                <if test="item.name != null">
                    WHEN id = #{item.id} THEN #{item.name}
                </if>
            </foreach>
        </trim>
        <trim prefix="age = CASE" suffix="END,">
            <foreach collection="list" item="item">
                <if test="item.age != null">
                    WHEN id = #{item.id} THEN #{item.age}
                </if>
            </foreach>
        </trim>
    </trim>
    WHERE id IN
    <foreach collection="list" item="item" open="(" separator="," close=")">
        #{item.id}
    </foreach>
</update>

5. 最佳實(shí)踐建議

  1. 批量大小控制:每批處理500-1000條數(shù)據(jù)最佳
  2. 事務(wù)管理:確保批量操作在一個(gè)事務(wù)中完成
  3. JDBC參數(shù):MySQL添加rewriteBatchedStatements=true
  4. 執(zhí)行器類型:對于大量數(shù)據(jù)考慮使用ExecutorType.BATCH
  5. 錯(cuò)誤處理:考慮分批處理,避免單批失敗導(dǎo)致全部回滾

到此這篇關(guān)于MyBatis批量操作XML的完整實(shí)現(xiàn)方案的文章就介紹到這了,更多相關(guān)MyBatis批量操作XML內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 從Date到LocalDateTime解析Java JDBC時(shí)間類型映射

    從Date到LocalDateTime解析Java JDBC時(shí)間類型映射

    在軟件開發(fā)中,時(shí)間處理一直是一個(gè)復(fù)雜而微妙的問題,時(shí)區(qū)、夏令時(shí)、精度、數(shù)據(jù)庫兼容性等問題時(shí)常困擾著開發(fā)者,本文將從歷史演進(jìn)的角度,深入探討JDBC時(shí)間類型映射的最佳實(shí)踐,并解釋背后的原理
    2025-12-12
  • Java8中Optional類型和Kotlin中可空類型的使用對比

    Java8中Optional類型和Kotlin中可空類型的使用對比

    這篇文章主要給大家介紹了關(guān)于Java8中Optional類型和Kotlin中可空類型的使用對比,文中通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Spring依賴注入的幾種方式分享梳理總結(jié)

    Spring依賴注入的幾種方式分享梳理總結(jié)

    這篇文章主要介紹了Spring依賴注入的幾種方式分享梳理總結(jié),文章圍繞主題展開詳細(xì),具有一定參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • Java向MySQL添加中文數(shù)據(jù)數(shù)據(jù)庫顯示亂碼的解決方案

    Java向MySQL添加中文數(shù)據(jù)數(shù)據(jù)庫顯示亂碼的解決方案

    在用springboot做項(xiàng)目時(shí),由于重新安裝了本地Mysql數(shù)據(jù)庫(5.7版本)在前臺(tái)向數(shù)據(jù)庫插入和更新數(shù)據(jù)可的時(shí)候,涉及中文的時(shí)候在數(shù)據(jù)庫一直顯示異常,所以本文給大家介紹了相關(guān)的解決方案,需要的朋友可以參考下
    2024-02-02
  • 一次詭異的full gc查找問題全過程

    一次詭異的full gc查找問題全過程

    這篇文章主要給大家分享介紹了一次詭異的full gc查找問題全部過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧啊
    2018-11-11
  • Springboot啟動(dòng)后執(zhí)行方法小結(jié)

    Springboot啟動(dòng)后執(zhí)行方法小結(jié)

    本文主要介紹了Springboot啟動(dòng)后執(zhí)行方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 基于SpringBoot和Vue3的博客平臺(tái)文章列表與分頁功能實(shí)現(xiàn)

    基于SpringBoot和Vue3的博客平臺(tái)文章列表與分頁功能實(shí)現(xiàn)

    在前面的教程中,我們已經(jīng)實(shí)現(xiàn)了基于Spring Boot和Vue3的發(fā)布、編輯、刪除文章功能。本教程將繼續(xù)引導(dǎo)您實(shí)現(xiàn)博客平臺(tái)的文章列表與分頁功能,需要的朋友可以參考閱讀
    2023-04-04
  • maven如何在tomcat8中實(shí)現(xiàn)自動(dòng)部署

    maven如何在tomcat8中實(shí)現(xiàn)自動(dòng)部署

    本篇文章主要介紹了maven如何在tomcat8中實(shí)現(xiàn)自動(dòng)部署,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java自動(dòng)生成編號的方法步驟

    Java自動(dòng)生成編號的方法步驟

    在新增數(shù)據(jù)時(shí),往往需要自動(dòng)生成編號,本文主要介紹了Java自動(dòng)生成編號的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java調(diào)整圖片大小的3種方式小結(jié)

    Java調(diào)整圖片大小的3種方式小結(jié)

    在軟件開發(fā)中處理圖像是一個(gè)常見任務(wù),特別是當(dāng)我們需要優(yōu)化圖像尺寸以適應(yīng)不同的應(yīng)用場景時(shí),這篇文章主要介紹了Java調(diào)整圖片大小的3種方式,需要的朋友可以參考下
    2024-09-09

最新評論

图木舒克市| 嘉鱼县| 永修县| 惠安县| 综艺| 绍兴县| 原阳县| 南昌县| 拜城县| 蒙阴县| 苗栗县| 谢通门县| 连州市| 民权县| 武城县| 潞城市| 七台河市| 安福县| 临猗县| 台南市| 武城县| 闽侯县| 前郭尔| 泸定县| 盐城市| 石台县| 山丹县| 金溪县| 桦甸市| 合山市| 涟源市| 星子县| 万宁市| 东乡族自治县| 新绛县| 舞钢市| 嵊泗县| 徐闻县| 类乌齐县| 卫辉市| 安顺市|