zoukankan      html  css  js  c++  java
  • MyBatis批量操作

    前言:在项目中遇到了需要批量操作数据表的情况,笔者遇到的是更新操作。但在mybatis中批量操作有多种,因此在此对mybatis中的批量操作以及其注意点进行总结。


    1.批量插入操作

    批量插入,传入的是一个List对象的集合,因此在mapper文件中需要用循环的方式进行操作,具体格式如下:

    <insert id="insertBatch" parameterType="java.utils.List">
           insert into tablename (xxx,xxx,xxx)
           values
            /*collection的属性值为接口中对应的参数名称
              (#{item.xxx},#{item.xxx},#{item.xxx}
               通过属性的方式取得对应的值,注意小括号的使用
            */
           <foreach collection="listxxx" item="item" separator=",">
               (#{item.xxx},#{item.xxx},#{item.xxx})
           </foreach>
     </insert>

    mapper文件对应的接口形式如下:

    public void insertBatch(@Param("listxxx") List<xxx> listxxx);

    2.批量更新操作

    批量更新操作,笔者总结了下面两种方式:

    ①使用循环update形式【这种方式需要特别注意,需要在数据库连接字符串中增加allowMultiQueries=true,不然会报异常】

     <update id="batchUpdate" parameterType="java.util.List">
    
            <foreach collection="list" index="index" item="item" separator=";">
                update t_demo_user set
                <if test="item.userName!=null">
                   user_name=#{item.userName},
                </if>
                <if test="item.gender!=null">
                    gender=#{item.gender}
                </if>
                 where user_id=#{item.userId}
            </foreach>
     </update>

    ②使用 case 形式

     <update id="batchUpdate" parameterType="java.util.List">
            UPDATE  t_demo_user
            <trim prefix="set" suffixOverrides=",">
                <trim prefix="user_name= case" suffix="end,">
                    <foreach collection="list" item="item" index="index">
                        <if test="item.userName !=null">
                            when user_id=#{item.userId} then #{item.userName}
                        </if>
                    </foreach>
                </trim>
                <trim prefix="gender= case" suffix="end,">
                    <foreach collection="list" item="item" index="index">
                        <if test="item.gender !=null">
                            when user_id=#{item.userId} then #{item.gender}
                        </if>
                    </foreach>
                </trim>
            </trim>
            where user_id in
            <foreach collection="list" item="item" index="index" separator="," open="(" close=")">
                #{item.userId}
            </foreach>
    </update>

    总结

    通过以上方式可实现批量插入与批量更新,但是笔者并没有进行效率方面的测试,也可能直接批处理效率更高。


    by Shawn Chen,2018.8.8日,下午。

  • 相关阅读:
    C语言之数组中你所不在意的重要知识
    Word2007怎样从随意页開始设置页码 word07页码设置毕业论文
    天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能
    高速排序算法
    Cocos2d-x中停止播放背景音乐
    Netflix公司监控内部安全的开源项目
    Linux内核——进程管理与调度
    WebService之Soap头验证入门
    Google搜索解析
    android-sdk-windows版本号下载
  • 原文地址:https://www.cnblogs.com/developer_chan/p/9320018.html
Copyright © 2011-2022 走看看