Mybatis 根据不同id进行批量更新

Mybatis批量更新

  • 应用环境
    Mybatis、Mysql

  • 实体类

    public class ServiceGroup {
    
        private Integer id;
    
        private String services;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getServices() {
            return services;
        }
    
        public void setServices(String services) {
            this.services = services;
        }
    }
    
  • Mapper接口

    public interface ServiceGroupMapper {
        
        public void updateServices(List<ServiceGroup> update);
    }
    
    
  • Mapper.xml文件中的update语句

    <update id="updateServices" parameterType="com.zongze.domain.ServiceGroup">
            update service_group
            <trim prefix="set" suffixOverrides=",">
                <trim prefix=" services = case" suffix="end,">
                    <foreach collection="list" index="index" item="item">
                    when id = #{item.id, jdbcType=INTEGER} then #{item.services, jdbcType=LONGVARCHAR}
                    </foreach>
                </trim>
            </trim>
            where id in
            <foreach close=")" collection="list" item="item" open="(" separator=",">
                #{item.id, jdbcType=INTEGER}
            </foreach>
        </update>
    
  • 控制台输出SQL语句

     update service_group set services = CASE WHEN id=? THEN ? WHEN id=? THEN ? END WHERE id in (?,?)
    
  • Mysql语句

    update service_group set services = CASE WHEN id=1 THEN '{"服务1,服务2"}' WHEN id=2 THEN '{"服务2,服务3"}' END WHERE id in (1,2);
    
如果你使用MyBatis来操作数据库,可以通过Mapper中的update方法来实现根据id批量修改数据。具体步骤如下: 1. 定义一个update方法,在方法中使用UPDATE语句来更新指定id的数据。例如,假设你要将id为1、2、3、4、5的记录的status字段值全部修改为1,可以在Mapper中定义如下方法: ``` int batchUpdateStatusById(List<Integer> ids, int newStatus); ``` 其中,ids是需要修改id列表,newStatus是新的字段值。 2. 在Mapper.xml文件中,编写UPDATE语句,使用foreach标签来遍历id列表。例如,假设你的表名为table,status是要修改的字段名,可以在Mapper.xml文件中编写如下语句: ``` <update id="batchUpdateStatusById" parameterType="java.util.List"> UPDATE table SET status = #{newStatus} WHERE id IN <foreach collection="ids" item="id" open="(" close=")" separator=","> #{id} </foreach> </update> ``` 其中,ids是方法参数中的List<Integer>类型参数,newStatus是方法参数中的int类型参数,#{newStatus}和#{id}分别表示新的字段值和遍历的id值。 3. 在Java代码中调用Mapper中的update方法,即可完成根据id批量修改数据的操作。例如,可以使用如下代码来调用batchUpdateStatusById方法: ``` List<Integer> ids = Arrays.asList(1, 2, 3, 4, 5); int newStatus = 1; int rows = mapper.batchUpdateStatusById(ids, newStatus); ``` 其中,ids是需要修改id列表,newStatus是新的字段值,rows是更新的记录数。 需要注意的是,使用MyBatis进行批量修改时,也要谨慎操作,避免误操作导致数据损失。建议在修改前先备份数据,以便出现问题时可以及时恢复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值