批處理數據主要有三種方式:java
1.傳統jdbc處理 2.mybatis批處理插入 3.使用executortype處理 sql
jdbc 處理 session
1.經過 for循環插入 main方法以下所示: Connection comm=null; PreparedStatement preparedStatement=null; conn=JdbcUtil.getConnection(); JdbcUtil.begin(conn); String sql="insert into t_user(username,password) values(?,?)"; preparedStatement=conn.preparedStatement(sql); for (int i=0;i<1000;i++) { preparedStatement.setString(1, "hello"+(i+1)); preparedStatement.setString(2, "world"+(i+1)); preparedStatement.executeUpdate(); } JdbcUtil.commit(conn); }
這樣就能夠進行批量插入 mybatis
第二種是使用addbatch方法 app
main方法以下所示: Connection comm=null; PreparedStatement preparedStatement=null; conn=JdbcUtil.getConnection(); JdbcUtil.begin(conn); String sql="insert into t_user(username,password) values(?,?)"; preparedStatement=conn.preparedStatement(sql); for (int i=0;i<1000;i++) { preparedStatement.setString(1, "hello"+(i+1)); preparedStatement.setString(2, "world"+(i+1)); if((i+1)%1000==0){ preparedStatement.addBatch(); preparedStatement.executeBatch(); preparedStatement.clearBatch(); } } JdbcUtil.commit(conn); }
二者差距在效果上後者更好一些。this
傳統的jdbc對數據的批處理有一些缺點 :好比一直使用的是for循環,會浪費大量的時間在session的鏈接上,並且java代碼和sql語句耦合度很大。spa
mybatis 在處理數據的時候有兩種方式,第一種是使用foreach標籤,另外一種是使用allowMultiQueries=true來完成。code
第一種使用foreach xml
xml文件內容以下: insert into person(username,email,gender) VALUES <foreach collection="persons" item="person" separator=","> (#{person.username},#{person.email},#{person.gender}) </foreach>
java文件以下
SqlSession sqlSession=this.getSqlSessionFactory.opensession();
PerSonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
List<Person> persons=new ArrayList<Person>();
for(int i=0;i<5;i++){
Person person=new Person("tom"+i,"email@"+i,"F");
persons.add(person);
}
personMapper.addPersons(persons)
sqlSession.commit();
}
另一種須要配置文件聲明allowMultiQueries=true 而後更改 xml文件中, 爲;就能夠了blog
最後一種批量操做的方法是 executortype的方式
1. xml語句
insert into person(username,email,gender) values (#{username},#{email},#{gender})
java語句
SqlSession sqlSession=this.getSqlSessionFactory.opensession(ExecutorType.BATCH);PerSonMapper personMapper=sqlSession.getMapper(PersonMapper.class);for(int i=0;i<5;i++){personMapper.addPerson(new Person("wang","email@123.com","F"));}