MyBatis批量插入insert方法总结

一、使用mybatis foreach标签

foreach主要用在构建in条件中,它可以在SQL语句中迭代一个集合。

foreach元素的属性主要有:item、index、collection、open、separator、close。

item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束。

在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了

演示代码:

这种方式是使用foreach标签进行sql执行语句的拼接以达到批量插入的操作,但此方式有限制,那就是不同的数据库服务器可执行的sql长度是不同的,处理大批量的数据时需慎用这种方式。

二、mybatis的ExecutorType.BATCH

Mybatis内置的ExecutorType有3种,默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql,而batch模式重复使用已经预处理的语句,并且批量执行所有更新语句,显然batch性能将更优。但batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的。

2.1 将插入语句改为单条插入

2.2 然后使用for循环反复执行

在获取SqlSession时修改执行器为BATCH类型即可。

2.3 SqlSessionTemplate配置

0

《MyBatis批量插入insert方法总结》有一个想法

发表评论

邮箱地址不会被公开。