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

Mybatis動(dòng)態(tài)SQL?foreach批量操作方法

 更新時(shí)間:2023年03月20日 17:06:59   作者:王衛(wèi)——David  
這篇文章主要介紹了Mybatis動(dòng)態(tài)SQL?foreach批量操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

動(dòng)態(tài)SQL Foreach批量操作

前言

最近正在研究Mybatis的動(dòng)態(tài)SQL,正好學(xué)習(xí)到了foreach元素。之前也是在項(xiàng)目開發(fā)中經(jīng)常會(huì)使用到Mybatis的foreach元素進(jìn)行批量操作。但是有時(shí)候就會(huì)使用出錯(cuò),所以整理和總結(jié)了關(guān)于使用foreach進(jìn)行增刪改查的方法。通過這篇博客詳細(xì)對(duì)于foreach的使用將會(huì)更加熟練和高效。

前置必要知識(shí)

在學(xué)習(xí)Mybatis的foreach之前,我們需要掌握到mysql的批量語句是如何書寫的。如果不清楚mysql批量語句怎么書寫那么在使用Mybatis的foreach元素進(jìn)行批量操作就跟無頭蒼蠅一樣,原理很簡(jiǎn)單,mybatis是一種持久層框架,其中一個(gè)作用就是拼接SQL并交給數(shù)據(jù)庫執(zhí)行SQL,所以在mybatis中我們需要將批量的SQL語句拼接成功,所以就會(huì)用到批量操作的SQL怎么書寫,然后才是怎么和Mybatis的語法結(jié)合。

讓我們來看看批量的增刪改查SQL語句如何書寫和執(zhí)行結(jié)果。

MySQL批量插入

INSERT INTO tar_course_content_info ( id, course_assembly_id, assembly_content, create_time, created_id, created_by, update_time, updated_id, updated_by, is_delete )
VALUES
    (
            301906655392563202,
            301906577433034752,
            '語文課',
            '2022-07-12 19:13:44',
            'EmE6TKu4okhu3qK5M1AGQ4',
            '張三',
            '2022-07-12 19:13:44',
            'PWeDZyRPADjsdxCNWnSWxZ',
            '王五',
            0 
            ),(
                301906655392563203,
                301906577433034752,
                '數(shù)學(xué)課',
                '2022-07-12 19:13:44',
                'EmE6TKu4okhu3qK5M1AGQ4',
                '張三',
                '2022-07-12 19:13:44',
                'PWeDZyRPADjsdxCNWnSWxZ',
                '王五',
            0 
    )

執(zhí)行結(jié)果
已經(jīng)受影響的行數(shù)為2行

MySQL批量查詢

使用in關(guān)鍵字,in關(guān)鍵字的作用是查詢某個(gè)范圍內(nèi)的數(shù)據(jù)

SELECT * FROM tar_course_content_info WHERE is_delete = 0 AND ( created_by, course_assembly_id ) IN (( '張三', 305107474690605056 ),( '李四', 308290117053710337 ))

執(zhí)行結(jié)果

MySQL批量修改

UPDATE tar_course_content_info SET created_by='王五' WHERE  course_assembly_id IN( 305107474690605056,308290117053710337)

執(zhí)行結(jié)果
已經(jīng)受影響的行數(shù)為13行

MySQL批量刪除

DELETE FROM tar_course_content_info where (created_by,id) in (('張三',301906655392563202),('張三',301906655392563203))

執(zhí)行結(jié)果

知道m(xù)ysql的sql語句的批量操作之后,我們?cè)倏纯丛趯?shí)際項(xiàng)目開發(fā)過程中,如何使用mybatis中的foreach進(jìn)行批量操作。

使用mybatis中的foreach進(jìn)行批量操作

foreach標(biāo)簽的各個(gè)屬性

collection表示迭代集合的名稱
item 表示本次迭代的獲取的元素,如果collection為L(zhǎng)ist、Set、或者Array,則表示其中的元素;若collection為may,則表示key-value中的value,該參數(shù)為必選
open 表示該語句以什么開始,常用的為左括弧 “(”,mybatis會(huì)將該字符串拼接到foreach包裹的sql語句之前,并且只拼接一次,該參數(shù)為可選項(xiàng)。
close 表示該語句以什么借宿,常用的為右括弧")",mybatis會(huì)將該字符串拼接到foreach包裹的sql語句之后,并且只拼接一次,該參數(shù)為可選項(xiàng)。
separator mybatis會(huì)在每次迭代后給sql加上separate屬性制定的字符,該參數(shù)為可選項(xiàng)。
index 在List、Set和Array表示當(dāng)前迭代的位置,在Map中,index表示key-value中的key,該參數(shù)為可選項(xiàng)。
nullable 表示集合是否可以為null,默認(rèn)為false,當(dāng)設(shè)置為true時(shí)集合為null不拋出異常

批量插入

<!--批量插入-->
    <insert id="insertBatch">
                INSERT INTO tar_course_content_info (
                    id,
                    course_assembly_id,
                    assembly_content,
                    create_time,
                    created_id,
                    created_by,
                    update_time,
                    updated_id,
                    updated_by,
                    is_delete
                ) values
                <foreach collection="list" item="item"  separator="," >
                (   #{item.id},
                    #{item.courseAssemblyId},
                    #{item.assemblyContent},
                    #{item.createTime},
                    #{item.createdId},
                    #{item.createdBy},
                    #{item.updateTime},
                    #{item.updatedId},
                    #{item.updatedBy},
                    #{item.iselete}
                )
                </foreach>

    </insert>

執(zhí)行結(jié)果

批量查詢

<!--根據(jù)創(chuàng)建人和課程組件id進(jìn)行批量查詢  -->
    <select id="queryAllCourseContentByCreatedByAndCourseAssemblyId" resultMap="courseContentMap">
            SELECT *
            FROM  tar_course_content_info
            WhERE
                is_delete=0
            and
                (created_by, course_assembly_id)
            in
            <foreach collection="list" item="item" open="(" close=")" separator="," nullable="false">
                (#{item.createdBy},#{item.courseAssemblyId})
            </foreach>

    </select>

執(zhí)行結(jié)果

批量修改

第一種情況是需更新的值相同:

<!--    根據(jù)創(chuàng)建人和內(nèi)容id進(jìn)行批量假刪除-->
    <update id="updateAllByCreatedByAndContentId">
        UPDATE tar_course_content_info SET is_delete=1 WHERE  (created_by,id) IN

            <foreach collection="list" item="item" open="(" close=")" separator="," >
                 (#{item.createdBy},#{item.id})

            </foreach>


    </update>

執(zhí)行結(jié)果

第二種情況是需更新的值不同:
這里需要注意,需要在連接數(shù)據(jù)是添加 &allowMultiQueries=true
作用:可以執(zhí)行批處理,同時(shí)發(fā)出多個(gè)SQL語句。也就是可以在sql語句后攜帶分號(hào),實(shí)現(xiàn)多語句執(zhí)行。

<!--    根據(jù)課程組件id批量修改創(chuàng)建人姓名-->
    <update id="updateAllCreatedByByCourseAssemblyId" >
        <foreach collection="list" item="item" separator=";" >
        UPDATE tar_course_content_info
        SET
            created_by = #{item.createdBy}
        WHERE
            course_assembly_id = #{item.courseAssemblyId}
        </foreach>

    </update>

執(zhí)行結(jié)果

批量刪除

<!--    根據(jù)創(chuàng)建人和內(nèi)容id進(jìn)行批量刪除-->
    <delete id="deleteAllByCreatedByAndContentId">
        DELETE FROM tar_course_content_info where (created_by,id) in

            <foreach collection="list" item="item" open="(" close=")" separator="," nullable="false" index="index">
                (#{item.createdBy},#{item.id})
            </foreach>

    </delete>

執(zhí)行結(jié)果

總結(jié)

學(xué)習(xí)一個(gè)新東西的時(shí)候,需要思考的是有哪些最少必要的前置知識(shí)我必須掌握,不然效率極慢。掌握最少必要知識(shí)之后開始新東西的學(xué)習(xí)會(huì)事半功倍。理論和實(shí)踐相結(jié)合。紙上得來終覺淺,欲知此事須躬行。

到此這篇關(guān)于Mybatis動(dòng)態(tài)SQL foreach批量操作的文章就介紹到這了,更多相關(guān)Mybatis動(dòng)態(tài)SQL foreach內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java自定義類加載器代碼示例

    java自定義類加載器代碼示例

    這篇文章主要介紹了java自定義類加載器代碼示例,具有一定借鑒價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • SpringBoot過濾器與攔截器使用方法深入分析

    SpringBoot過濾器與攔截器使用方法深入分析

    大家應(yīng)該都曉得實(shí)現(xiàn)過濾器需要實(shí)現(xiàn) javax.servlet.Filter 接口,而攔截器會(huì)在處理指定請(qǐng)求之前和之后進(jìn)行相關(guān)操作,配置攔截器需要兩步,本文通過實(shí)例代碼給大家介紹SpringBoot 過濾器和攔截器的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-12-12
  • springboot多模塊化整合mybatis,mapper自動(dòng)注入失敗問題及解決

    springboot多模塊化整合mybatis,mapper自動(dòng)注入失敗問題及解決

    這篇文章主要介紹了springboot多模塊化整合mybatis,mapper自動(dòng)注入失敗問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java SSM框架如何添加寫日志功能

    Java SSM框架如何添加寫日志功能

    這篇文章主要介紹了Java SSM框架如何添加寫日志功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 淺析java修飾符訪問權(quán)限(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    淺析java修飾符訪問權(quán)限(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    Java有四種訪問權(quán)限,其中三種有訪問權(quán)限修飾符,分別為private,public和protected,還有一種不帶任何修飾符,下面通過本文給大家簡(jiǎn)單介紹下java修飾符訪問權(quán)限相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2017-04-04
  • Java ArrayList擴(kuò)容機(jī)制原理深入分析

    Java ArrayList擴(kuò)容機(jī)制原理深入分析

    在Java中,ArrayList是最常用的集合之一。它是一種容器,它的內(nèi)部定義了一個(gè)Object類型的數(shù)組elementData,因此可用于存儲(chǔ)任意類型的數(shù)據(jù)。我們知道,數(shù)組是長(zhǎng)度恒定的。而ArrayList相當(dāng)于是一個(gè)長(zhǎng)度可變的動(dòng)態(tài)數(shù)組,一起來看看的它的擴(kuò)容機(jī)制
    2023-02-02
  • 解決FeignClient重試機(jī)制造成的接口冪等性

    解決FeignClient重試機(jī)制造成的接口冪等性

    這篇文章主要介紹了解決FeignClient重試機(jī)制造成的接口冪等性問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 十分簡(jiǎn)單易懂的Java應(yīng)用程序性能調(diào)優(yōu)技巧分享

    十分簡(jiǎn)單易懂的Java應(yīng)用程序性能調(diào)優(yōu)技巧分享

    這篇文章主要介紹了十分簡(jiǎn)單易懂的Java性能調(diào)優(yōu)技巧分享,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringMVC教程之文件上傳與下載詳解

    SpringMVC教程之文件上傳與下載詳解

    本文將對(duì)使用MultipartResolver處理文件上傳的步驟,兩種文件下載方式(直接向response的輸出流中寫入對(duì)應(yīng)的文件流、使用 ResponseEntity<byte[]>來向前端返回文件)等進(jìn)行詳盡介紹,需要的可以參考一下
    2022-12-12
  • Java面試題沖刺第五天--基礎(chǔ)篇2

    Java面試題沖刺第五天--基礎(chǔ)篇2

    這篇文章主要為大家分享了最有價(jià)值的三道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評(píng)論

阿克苏市| 丁青县| 渝中区| 耿马| 峨山| 平定县| 沂南县| 剑川县| 瓦房店市| 耿马| 香格里拉县| 邵阳市| 上林县| 嵊泗县| 哈尔滨市| 天门市| 义马市| 敦煌市| 宁远县| 凤冈县| 大连市| 双江| 洛隆县| 临夏市| 大渡口区| 祥云县| 扶沟县| 南郑县| 阳山县| 息烽县| 积石山| 凤凰县| 兰坪| 樟树市| 南木林县| 吴桥县| 苏尼特左旗| 萍乡市| 漾濞| 康平县| 金湖县|