众妙之门

业精于勤,荒于嬉;行成于思,毁于随

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

如果要在一个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>

 

posted on 2018-12-17 10:46  xuanm  阅读(14636)  评论(0编辑  收藏  举报