【MySQL】xml中MyBatis动态sql之批量修改、批量新增(使用foreach标签一条sql解决)

批量修改:

1.Mapper.java
@Mapper
public interface DeviceMapper {

void updateDevNotList(List<Map<String, Object>> list);

}
2.Mapper.xml

说明:根据list中每条数据的id修改对应的install_address、product_name   WHEN是条件,THEN是赋值

<update id="updateDevNotList" >
        UPDATE
            dev_device_instance
        SET
            install_address =
                <foreach collection="list" item="item" index="index" separator=" " open="case id" close="end">
                    WHEN #{item.id} THEN #{item.installAddress}
                </foreach>

            ,product_name =
                <foreach collection="list" item="item" index="index" separator=" " open="case id" close="end">
                    WHEN #{item.id} THEN #{item.productName}
                </foreach>

            WHERE id IN
                <foreach collection="list" item="item" open="(" separator="," close=")">
                    #{item.id,jdbcType=INTEGER}
                </foreach>
    </update>

 批量新增

1.Mapper.java
@Mapper
public interface DeviceMapper {

void importDevice(List<WaterMeterImport> list);

}
2.Mapper.xml

说明:前提是字段都有传过来,如果是新增哪个传哪个,就要加<if>标签判断

<insert id="importDevice">
        INSERT INTO dev_device_instance( id, product_id, product_name, name, creator_name, create_time)
        VALUES
        <foreach collection="list" separator="," item="item">
            (#{item.deviceId}, #{item.productId}, #{item.productName}, #{item.deviceName}, #{item.createBy}, #{item.createTime})
        </foreach>
 </insert>

即使人生大写着失败,也不妨碍我继续向前!

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis进行批量新增有几种方式。 第一种方式是使用for循环进行新增。这种方式类似于之前使用Hibernate进行批量新增的方式。你可以在循环调用insert语句,每次插入一条数据。这种方式适用于数据量较小的情况。 第二种方式是使用MyBatis批量模式进行新增。你可以通过在SqlSession设置ExecutorType为BATCH来启用批处理模式。然后,在循环调用mapper的插入方法,将数据对象传递给插入方法。最后,调用SqlSession的commit方法提交批量操作。这种方式会将所有的插入操作集在一个批处理执行,可以提高插入的效率。 第三种方式是依赖于数据库的特性,使用<foreach>标签来拼接批量插入的SQL。具体的语法和实现方式取决于使用的数据库。在MySQL,你可以使用类似"insert into table(field1,field2,...) values ('test1','test1',...),('test2','test2',...),('test3','test3',...)..."的语法。在Oracle,你可以使用"insert all ... select 1 from dual"的语法。这种方式适用于从无到有的新增,比如批量导入Excel数据。 引用的Mapper的XML配置文件提供了namespace的声明,引用的代码示例展示了使用MyBatis批量模式进行新增的测试方法。你可以参考这些配置和代码来实现MyBatis批量新增功能。123 #### 引用[.reference_title] - *1* *2* *3* [MyBatis批量新增](https://blog.csdn.net/hi__study/article/details/94570159)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值