Mybatis本身是很灵活的,因为可以自己在XML文件中编写sql进行操作,那就可以一次性将插入到数据库中,这样只用向数据库提交一次,性能也可以提高不少。下面来看一个例子:
首先,在DataMapper.java 接口类中加入接口:
void batchInsertUcfUserBatchImport(List ucfUserBatchImportList) throws Exception;
然后,在DataMapper.xml 中编写对应的实现sql,我使用的是MySQL,如果是Oracle,可能sql语句会略有区别吧:
最后,在需要批量插入Data数据的地方调用接口:
ucfUserBatchImportDao.batchInsertUcfUserBatchImport(ucfUserBatchImportList);
说明一下xml文件的实现,使用foreach标签,是用来拼接内部的字符串,item就相当于一个指针,用来遍历list中的对象,将每一个item的属性值复制给内部sql之后,一次性执行一个长的sql语句。如果我们从后台打印sql执行语句的话,会看到这样的sql语句
insert into TABLE (ID, TEXT, STAUTS) values
(xx, xx, xx),
(xx, xx, xx),
(xx, xx, xx)
从性能方面考虑,不管插入多少条数据,都只用向数据库提交一次,这样效率就会大幅提升。
但是Oracle不支持这种语法,我们可以使用insert all来完成批量插入,insert all相关介绍可以参考这里https://blog.csdn.net/diweikang/article/details/89978190
项目中使用的批量添加操作:
如果我们从后台打印sql执行语句的话,会看到这样的sql语句
insert all
into TABLE (ID, TEXT, STAUTS) values (xx, xx, xx)
into TABLE (ID, TEXT, STAUTS) values (xx, xx, xx)
into TABLE (ID, TEXT, STAUTS) values (xx, xx, xx)
select * from dual
项目中使用的批量修改操作:
参考:http://blog.csdn.net/mahoking/article/details/46811865