文档章节

MyBatis批量操作

o
 osc_pn11u1x9
发布于 2018/08/08 17:38
字数 436
阅读 9
收藏 0

精选30+云产品,助力企业轻松上云!>>>

前言:在项目中遇到了需要批量操作数据表的情况,笔者遇到的是更新操作。但在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日,下午。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

pyhon

cython 相关的帖子. http://blog.behnel.de/categories/cython.html https://www.nexedi.com/ 我们追求的价值观 家 多核Python HTTP服务器(比Go更快)(破坏者:Cython) 价值观 当让-保罗·...

MtrS
26分钟前
9
0
多处理与线程Python - Multiprocessing vs Threading Python

问题: I am trying to understand the advantages of multiprocessing over threading . 我试图了解多处理优于线程的优势。 I know that multiprocessing gets around the Global Interpret......

法国红酒甜
31分钟前
9
0
格式编号始终显示2个小数位 - Format number to always show 2 decimal places

问题: I would like to format my numbers to always display 2 decimal places, rounding where applicable. 我想将数字格式化为始终显示2个小数位,并在适用的情况下四舍五入。 Examples...

富含淀粉
今天
22
0
Docker可视化工具Portainer

1 前言 从没想到Docker也有可视化的工具,因为它的命令还是非常清晰简单的。无聊搜了一下,原来已经有很多Docker可视化工具了。如DockerUI、Shipyard、Rancher、Portainer等。查看对比了一番...

南瓜慢说
今天
20
0
日志系统新贵 Loki,真香!!

最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的背景。...

庞陆阳
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部