溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis動態(tài)SQL?foreach批量操作方法有哪些

發(fā)布時間:2023-03-21 11:26:20 來源:億速云 閱讀:145 作者:iii 欄目:開發(fā)技術

本篇內容主要講解“Mybatis動態(tài)SQL foreach批量操作方法有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Mybatis動態(tài)SQL foreach批量操作方法有哪些”吧!

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

    前置必要知識

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

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

    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ù)學課',
                    '2022-07-12 19:13:44',
                    'EmE6TKu4okhu3qK5M1AGQ4',
                    '張三',
                    '2022-07-12 19:13:44',
                    'PWeDZyRPADjsdxCNWnSWxZ',
                    '王五',
                0 
        )

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

    Mybatis動態(tài)SQL?foreach批量操作方法有哪些

    MySQL批量查詢

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

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

    執(zhí)行結果

    Mybatis動態(tài)SQL?foreach批量操作方法有哪些

    MySQL批量修改

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

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

    Mybatis動態(tài)SQL?foreach批量操作方法有哪些

    MySQL批量刪除

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

    執(zhí)行結果

    Mybatis動態(tài)SQL?foreach批量操作方法有哪些

    知道m(xù)ysql的sql語句的批量操作之后,我們再看看在實際項目開發(fā)過程中,如何使用mybatis中的foreach進行批量操作。

    使用mybatis中的foreach進行批量操作

    foreach標簽的各個屬性

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

    Mybatis動態(tài)SQL?foreach批量操作方法有哪些

    批量查詢

    <!--根據(jù)創(chuàng)建人和課程組件id進行批量查詢  -->
        <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í)行結果

    Mybatis動態(tài)SQL?foreach批量操作方法有哪些

    批量修改

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

    <!--    根據(jù)創(chuàng)建人和內容id進行批量假刪除-->
        <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í)行結果

    Mybatis動態(tài)SQL?foreach批量操作方法有哪些

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

    Mybatis動態(tài)SQL?foreach批量操作方法有哪些

    <!--    根據(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í)行結果

    Mybatis動態(tài)SQL?foreach批量操作方法有哪些

    批量刪除

    <!--    根據(jù)創(chuàng)建人和內容id進行批量刪除-->
        <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í)行結果

    Mybatis動態(tài)SQL?foreach批量操作方法有哪些

    到此,相信大家對“Mybatis動態(tài)SQL foreach批量操作方法有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

    AI