发布网友 发布时间:2023-01-01 20:13
共1个回答
热心网友 时间:2023-10-08 18:26
mybatis的批量操作有两种方式,一是使用foreach标签,二是使用mybatis的BATCH模型
在xml中通过foreach对表数据进行循环操作
在oracle中不支持insert into proct(name, type, price) values ('a', 'tv', 1233), ('b', 'ac', 3455),....('','','')这种形式的sql,因此oracle批量插入使用 insert all into table(...) values(...) into table(...) values(...) select * from al; 语句来解决以下方式,并且需要显示指定useGeneratedKeys=false
另一种方法是使用另外一种方法是 insert into table(...) (select ... from al) union all (select ... from al)
Mybatis内置的ExecutorType一共有三种,默认为SIMPLE,该模式下它为每个语句的执行创建一个新的预处理语句,并单条提交sql。
而BATCH模式会重复使用已经预处理的语句,并且批量执行所有更新语句,显然batch性能将更优;
注意: batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的。
具体用法如下:
ProctMapper.java如下:
mapper.xml如下: