由于工作中有需要插入临时表关联更新的需求,因此会将多条语句塞到一个更新函数中去执行,执行时发现MyBatis 只会返回第一句SQL 的执行结果,后面的SQL 虽然也会执行,但是如果有错误 不会抛出异常
下面简单写下测试的SQL描述对应现象,新建了一张BatchOperatorTest 的测试表,其中有个 isactive 字段,数据类型是tinyint 因此数据库中最大允许存为255
<update id="testError">
update BatchOperatorTest set isactive = 2 where id = 'C0847777-52F2-4EE0-83E3-E8CBB61DAFD6';
update BatchOperatorTest set isactive = 256 where id = 'C0847777-52F2-4EE0-83E3-E8CBB61DAFD6';
</update>
测试函数
@Test
@Transactional
public void testError(){
batchOperatorTestMapper.testError();
}
下面是执行结果
因为添加了事务,数据库中的数据没有被更新,但是从测试结果上看显示无异常抛出,下面是运行的结果截图
当我去除事务的时候,数据将被更新为2,且不会抛错
因为没有异常抛出 try catch 也捕获不到,想问下如何在多SQL 的情况下 捕获到SQL 是否执行成功
jdbc:mysql://xxx?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
数据库连接加上这个试试
就因为多改几条数据,就要丢一起?你这怕是开始路就走歪了吧