mybatis批量更新实例类

项目场景:

今天项目中需要将查出的实体类集合批量更新,结果一直报sql语法错误,真的有点挠头。


问题描述

就是下面这条sql:

<update id="batchUpdateTaskDeadlineTime" parameterType="java.util.List">
	start transaction ;
	<foreach collection="list" index="index" item="item">
		update evt_task set task_deadline_time = #{item.taskDeadlineTime} where evt_task_id  = #{item.evtTaskId} ;
	</foreach>
    commit ;
</update>

我感觉他正常的很,但是报错:
在这里插入图片描述


原因分析:

根据国际管理,遇到bug先看看网友怎么说,于是找到了:

默认情况下,数据库是不支持执行这样由 “;” 号拼接的长串的,执行的时候会报错,提示说执行的SQL有语法错误。


解决方案:

需要通过在数据库连接URL中指定allowMultiQueries参数值为true告诉数据库以支持 "; " 号分隔的多条语句的执行。

例:

spring:
	datasource:
		url:jdbc:mysql://localhost:3306/test?allowMultiQueries=true
MyBatis中,可以使用批量来提高数据库操作的效率。下面是一个示例的MyBatis批量更新的测试类: ```java import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.ArrayList; import java.util.List; public class BatchUpdateTest { @Test public void testBatchUpdate() { SqlSession sqlSession = null; try { sqlSession = MyBatisUtils.getSqlSession(); // 获取Mapper接口的实例 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 创建一个包含多个User对象的列表 List<User> userList = new ArrayList<>(); userList.add(new User(1, "user1", 20)); userList.add(new User(2, "user2", 25)); userList.add(new User(3, "user3", 30)); // 执行批量更新操作 userMapper.batchUpdate(userList); // 提交事务 sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); // 回滚事务 sqlSession.rollback(); } finally { // 关闭SqlSession if (sqlSession != null) { sqlSession.close(); } } } } ``` 上述代码中,首先获取了一个SqlSession对象,然后通过该对象获取了一个Mapper接口的实例。接着创建了一个包含多个User对象的列表,这些对象表示要进行批量更新的数据。最后调用Mapper接口中的批量更新方法`batchUpdate()`来执行批量更新操作。 需要注意的是,在执行批量更新操作之前,需要手动开启事务,并在更新完成后提交事务。如果出现异常,需要回滚事务。最后,记得关闭SqlSession对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值