Mybatis批量数据的处理

Mybatis批量数据的处理

八月 19, 2019

JDBC批量插入方法:

1.java代码使用for循环直接插入sql数据 execute()、executeUpdate()

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Connection conn = JdbcUtil.getConnection();
PrepareStatement prepareStament =null;
JdbcUtil.begin(conn);//将自动提交改为手动提交

String sql ="insert into t_user(username,password) values(?,?)";
prepareStament = conn.prepareStament(sql);

long beginTime = System.currentTimeMillis();
for(int i = 0; i < 1000 ;i++){
prepareStament.setString(1,"hello"+(i+1));
prepareStament.setString(2,"hello"+(i+1));
prepareStament.executeUpdate();
}
JdbcUtil.commit(conn);

long endTime = System.currentTimeMillis();
syso(endTime - beginTime);
2277
2.借助Statement、Prstatement对象的批处理方法addBatch(执行效率较高)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Connection conn = JdbcUtil.getConnection();
PrepareStatement prepareStament =null;
JdbcUtil.begin(conn);//将自动提交改为手动提交

String sql ="insert into t_user(username,password) values(?,?)";
prepareStament = conn.prepareStament(sql);
for(int i = 0; i < 1000 ;i++){
prepareStament.setString(1,"hello"+(i+1));
prepareStament.setString(2,"hello"+(i+1));
prepareStament.executeUpdate();
if((i+1)%100==0){
prepareStament.addBatch();
prepareStament.executeBatch();
prepareStament.clearBatch();//清楚批处理内容
}
}
84

Mybatis对批处理插入的支持

1.借助foreach标签使用 insert into table valus()(比较常用)
2.jiehzu Mysql数据库连接属性AlloeMultiQueries=true(了解)
3,使用executortype进行批量添加(**很重要**)
1
2
3
4
5
6
7
8
9
10
11
public void testBatchForExecutor()
{ //让当前sqlSession具有批处理能力
SqlSession sqlSession = this.getSqlSessionFactory().openSession(ExecutorType.BATCH);
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
for (int i = 0; i <10000 ; i++)
{
personMapper.addPerson(new Person("tom","tom@imooc.com","F"));
}
sqlSession.commit();
sqlSession.close();
}
1
2
3
<insert id="addPerson" parameterType="person">
insert into person(username,email,gender) VALUES (#{username},#{email},#{gender})
</insert>