Mybatis学习--批量update语句

<!-- 批量更新购物车中商品购买数量 -->
	<update id="updateShoppingCartCount" parameterType="list">
            update tbl_shopping_cart
            <trim prefix="set" suffixOverrides=",">
	             <trim prefix="purchaseCount =case" suffix="end,">
	                 <foreach collection="list" item="i" index="index">
	                         <if test="i.purchaseCount!=null">
	                          when id=#{i.id} then #{i.purchaseCount}
	                         </if>
	                 </foreach>
	              </trim>
             </trim>
            where
           <foreach collection="list" separator="or" item="i" index="index" >
             id=#{i.id}
           </foreach>
           and status = "0"
	</update>


从下面这篇文章学习到的:

点击打开链接

MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。在使用MyBatis-Plus进行批量条件更新时,可以利用其提供的`updateBatchById`方法或者自定义SQL语句。以下是两种常见的批量条件更新方法: 1. 使用`updateBatchById`方法: MyBatis-Plus提供了一个`updateBatchById`方法,这个方法可以用来批量更新数据。但是请注意,它默认是无条件更新所有记录,因此如果需要添加条件,需要在你的实体类中使用`@TableField`注解来指定更新条件。 ```java // 条件实体 LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(User::getName, "张三"); // 构建更新内容 User user = new User(); user.setAge(20); // 执行批量更新 userMapper.updateBatchById(Arrays.asList(user1, user2), 30); ``` 在上面的代码中,`updateBatchById`方法的第二个参数表示每次批量更新的记录数。如果不设置,默认为1000。 2. 自定义SQL批量更新: 如果需要更复杂的条件更新,可以通过编写自定义的SQL语句来实现。使用`update`方法并传入自定义的SQL语句和参数。 ```java // 自定义SQL更新语句 String sql = "UPDATE user SET age = #{age} WHERE name = #{name}"; // 设置批量更新的参数 List<User> userList = new ArrayList<>(); userList.add(new User("张三", 20)); userList.add(new User("李四", 30)); // 执行批量更新 userMapper.update(null, Wrappers.<User>lambdaUpdate().in(User::getName, userList.stream().map(User::getName).collect(Collectors.toList()))); ``` 在使用批量更新时,需要注意以下几点: - 确保SQL语句的正确性和安全性,避免SQL注入等问题。 - 根据实际情况调整批量更新的记录数,以免造成内存溢出或事务过大。 - 如果使用自定义SQL,请确保已正确设置更新条件,避免误更新其他无关联的记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值