比较两种批量插入数据的方法,差距不是一般的大!!!
方法一:最笨重的方法!!一条一条的插入
sql语句如下:
<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>
测试代码:
@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的批量插入。
<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>
测试代码:
@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秒!!