mybatis傳入List實現批量更新


如果要在一個update里面執行多條更新語句,只需要在jdbc:url后面跟上allowMultiQueries=true的參數,比如:

jdbc:mysql://127.0.0.1:3306/test?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=utf-8

1.用for循環通過循環傳過來的參數集合,循環出N條sql,

2.用mysql的case when 條件判斷變相的進行批量更新  

<!-- 批量更新第一種方法,通過接收傳進來的參數list進行循環着組裝sql -->
<update id="batchUpdate" parameterType="java.util.Map">
    <!-- 接收list參數,循環着組裝sql語句,注意for循環的寫法
         separator=";" 代表着每次循環完,在sql后面放一個分號
         item="cus" 循環List的每條的結果集
         collection="list" list 即為 map傳過來的參數key -->
    <foreach collection="list" separator=";" item="cus">
        update t_customer set
        c_name = #{cus.name},
        c_age = #{cus.age},
        c_sex = #{cus.sex},
        c_ceroNo = #{cus.ceroNo},
        c_ceroType = #{cus.ceroType}
        where id = #{cus.id}
    </foreach>
</update>

<!-- 批量更新第二種方法,通過 case when語句變相的進行批量更新 -->
<update id="batchUpdateCaseWhen" parameterType="java.util.Map">
    update t_customer
    <trim prefix="set" suffixOverrides=",">
        <!-- 拼接case when 這是一種寫法 -->
        <!--<foreach collection="list" separator="" item="cus" open="c_age = case id" close="end, ">-->
        <!--when #{cus.id} then #{cus.age}-->
        <!--</foreach>-->

        <!-- 拼接case when 這是另一種寫法,這種寫着更專業的感覺 -->
        <trim prefix="c_name =case" suffix="end,">
            <foreach collection="list" item="cus">
                <if test="cus.name!=null">
                    when id=#{cus.id} then #{cus.name}
                </if>
            </foreach>
        </trim>
        <trim prefix="c_age =case" suffix="end,">
            <foreach collection="list" item="cus">
                <if test="cus.age!=null">
                    when id=#{cus.id} then #{cus.age}
                </if>
            </foreach>
        </trim>
        <trim prefix="c_sex =case" suffix="end,">
            <foreach collection="list" item="cus">
                <if test="cus.sex!=null">
                    when id=#{cus.id} then #{cus.sex}
                </if>
            </foreach>
        </trim>
        <trim prefix="c_ceroNo =case" suffix="end,">
            <foreach collection="list" item="cus">
                <if test="cus.ceroNo!=null">
                    when id=#{cus.id} then #{cus.ceroNo}
                </if>
            </foreach>
        </trim>
        <trim prefix="c_ceroType =case" suffix="end,">
            <foreach collection="list" item="cus">
                <if test="cus.ceroType!=null">
                    when id=#{cus.id} then #{cus.ceroType}
                </if>
            </foreach>
        </trim>
    </trim>
    <where>
        <foreach collection="list" separator="or" item="cus">
            id = #{cus.id}
        </foreach>
    </where>
</update>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM