mybatis批處理數據


批處理數據主要有三種方式:

1.傳統jdbc處理    2.mybatis批處理插入    3.使用executortype處理 

jdbc 處理 

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);
}

這樣就可以進行批量插入 

第二種是使用addbatch方法 

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);
}

兩者差距在效果上后者更好一些。

傳統的jdbc對數據的批處理有一些缺點 :比如一直使用的是for循環,會浪費大量的時間在session的連接上,而且java代碼和sql語句耦合度很大。

mybatis 在處理數據的時候有兩種方式,第一種是使用foreach標簽,另一種是使用allowMultiQueries=true來完成。

第一種使用foreach 

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文件中, 為;就可以了

 

最后一種批量操作的方法是 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"));

}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM