前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis批量更新的两种方式

Mybatis批量更新的两种方式

作者头像
sr
发布2019-05-23 17:48:05
15.3K0
发布2019-05-23 17:48:05
举报
文章被收录于专栏:swag codeswag code

前言

在使用Mybatis框架的过程中,经常会通过构建动态SQL来处理批量插入,批量更新数据等相关操作,本文将以批量更新为例,简单介绍其使用过程

动态SQL元素

if set trim foreach

批量更新

映射方法

代码语言:javascript
复制
int updateOrderItem(List<OrderItem> list);

实体类字段

代码语言:javascript
复制
public class OrderItem {
    private Integer id;
    private Integer orderId;
    private Integer productId;
    private Integer count;
    //省略...
    }

测试代码

代码语言:javascript
复制
List<OrderItem> list=new ArrayList<>();
OrderItem orderItem=new OrderItem();
orderItem.setCount(66);
orderItem.setId(1);
OrderItem orderItem1=new OrderItem();
orderItem1.setCount(5);
orderItem1.setId(2);
list.add(orderItem);
list.add(orderItem1);
orderItemMapper.updateOrderItem(list);

方式一

代码语言:javascript
复制
<update id="updateOrderItem"  parameterType="java.util.List">
  <foreach collection="list" item="item"  separator=";">
    update order_item
    <set>
      <if test="item.orderId != null">
        order_id = #{item.orderId},
      </if>
      <if test="item.productId != null">
        product_id = #{item.productId},
      </if>
      <if test="item.count != null">
        count = #{item.count}
      </if>
    </set>
    where id = #{item.id}
  </foreach>
</update>

对应SQL:

代码语言:javascript
复制
[cn.srblog.dao.OrderItemMapper.updateOrderItem]-==>  Preparing: update order_item SET count = ? where id = ? ; update order_item SET count = ? where id = ? 
[cn.srblog.dao.OrderItemMapper.updateOrderItem]-==> Parameters: 66(Integer), 1(Integer), 5(Integer), 2(Integer)
[cn.srblog.dao.OrderItemMapper.updateOrderItem]-<==    Updates: 1

此方式需要允许MySQL的一次执行多条SQL

代码语言:javascript
复制
url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8&allowMultiQueries=true

方式二

代码语言:javascript
复制
<update id="updateOrderItem"  parameterType="java.util.List">
      update order_item
      <trim prefix="set" suffixOverrides=",">
        <trim prefix="orderId = case" suffix="end,">
          <foreach collection="list" item="item">
            <if test="item.orderId != null">
              when id=#{item.id} then #{item.orderId}
            </if>
          </foreach>
        </trim>
        <trim prefix="productId = case" suffix="end,">
          <foreach collection="list" item="item">
            <if test="item.productId != null">
              when id=#{item.id} then #{item.productId}
            </if>
          </foreach>
        </trim>
        <trim prefix="count = case" suffix="end,">
          <foreach collection="list" item="item">
            <if test="item.count != null">
              when id=#{item.id} then #{item.count}
            </if>
          </foreach>
        </trim>
      </trim>
  </update>

对应SQL

代码语言:javascript
复制
[cn.srblog.dao.OrderItemMapper.updateOrderItem]-==>  Preparing: update order_item set count = case when id=? then ? when id=? then ? end 
[cn.srblog.dao.OrderItemMapper.updateOrderItem]-==> Parameters: 1(Integer), 66(Integer), 2(Integer), 5(Integer)
[cn.srblog.dao.OrderItemMapper.updateOrderItem]-<==    Updates: 3
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 动态SQL元素
    • 批量更新
      • 方式一
        • 方式二
        相关产品与服务
        云数据库 MySQL
        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档