图1 方案1效率低,不建议采取

方案2:利用foreach批量插入(数据量不大时可以利用)

既然一条一条插入效率较低,那可以采取批量插入的办法,该方案相对方案1紧张有2点改动:

1.首先将我们要插入的数据封装为一个List凑集,并对我们Dao层接口作一定改造,使其可以吸收一个List凑集;

phpinsertinto批量你知道插入年夜批量数据时有哪几种计划吗 PHP

2.其次我们对Mybatis mapper文件中的SQL进行改造,紧张利用Mybatis的<foreach>标签将传入的List凑集进行循环插入:

这种方案相对付第一种方案,插入性能有了大幅提升,事理便是Mybatis将insert语句

转换为

这样就让多条insert into插入语句变成了一条插入语句,可以带来性能上的提升,但也存在着两个问题:

(1)当插入的数据较多时,相称于拼接的sql语句会特殊的长,乃至超过sql语句的长度,一旦超出,就会抛出非常导致无法插入;

(2)当插入的数据较多时,也比较耗时。

方案3.利用foreach合营分片批量插入(数据量较大时推举利用)

既然不能封装成一条SQL,那我们考虑有没有其他的办法,当然有,可以采取分片的办法。

紧张事理便是将list凑集按"指定长度"进行切分,返回新的List<List<T>>凑集。

这里分片的目的有两个:

1、批量插入,拼接的SQL语句过长,sql语句会有限定;

2、分片后采取stream多线程并行插入可以提高效率。

此外,不管是mysql还是oracle数据库,都可以利用分片进行插入。

总结

总的来说,当实际业务场景数据量不是很大时,大家利用方案2就可以了,但插入数据量较大时,阿海还是推举大家利用方案3,可以大大提升插入效率。
在口试时,同学们可以着重讲讲方案3,相信口试官会对你刮目相看。