Mysql批量插入数据

比较两种批量插入数据的方法,差距不是一般的大!!!
方法一:最笨重的方法!!一条一条的插入
sql语句如下:

1
2
3
4
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into somedemo.user(uername, sex, address, birthday, password, create_time, creator, update_time, updater, statu)
values (#{uername}, #{sex}, #{address}, #{birthday}, #{password}, #{createTime}, #{creator}, #{updateTime}, #{updater}, #{statu})
</insert>

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Test
public void inserUser(){
User user = new User();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String baseName = "德鲁大叔";
String baseAddress = "上海市";
String basePass = "0";
int size = 1000000;
System.err.println("开始执行时间:"+df.format(new Date()));
for (int i = 2; i < size; i++) {
user.setUername(baseName+i);
user.setAddress(baseAddress+i);
user.setPassword(basePass+i);
user.setStatu("0");
user.setSex("1");
userService.insert(user);
}
System.err.println("执行结束时间:"+df.format(new Date()));

}

插入一百万数据用时48分钟!!!! 简直不可容忍啊。
在这里插入图片描述
方法二:mybatis的批量插入。

1
2
3
4
5
6
<insert id="insertUsers" parameterType="java.util.List">
insert into user(uername, sex, address, password,statu) values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.uername},#{item.sex},#{item.address},#{item.password},#{item.statu})
</foreach>
</insert>

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Test
public void mybatis批量插入(){
List<User> users = new ArrayList<>();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String baseName = "mybatis";
String baseAddress = "银川市";
String basePass = "1";
int size = 1000000;
for (int i = 0; i < size; i++) {
User user = new User();
user.setUername(baseName+i);
user.setAddress(baseAddress+i);
user.setPassword(basePass+i);
user.setStatu("0");
user.setSex("1");
users.add(user);
}
System.err.println("开始执行时间:"+df.format(new Date()));
int res = userService.insertUsers(users);
System.err.println("执行结束时间:"+df.format(new Date()));

}

运行结果:
在这里插入图片描述
在这里插入图片描述
可见,用mybatis的批量插入,同样的插入一百万条数据,用时仅49秒!!

坚持原创技术分享,您的支持将鼓励我继续创作!