Hibernate较大数据量的写表
如果简单的使用session.save()或者session.update()或者session.saveOrUpdate()会使得内存激增之外,commit时写表效率也会极低,虽然hibernate也有批量插入方法,但是效率依旧比不上JDBC。可能这就是hibernate的痛点吧。
final String insertBjsFeedBackSql = "insert into B_JS_FEEDBACK "
+ " (RPEDLN,RPEDBT,RPIVN_NO,RPDOC,RPDCT,RPKCO,RPLNID,RPAIT,RPNSP,RPRMK3,RPIRF,RPURRF,RPAG,RPATXN,RPSTAM,RPAG1,RPATXN1,RPSTAM1,RPEV01,RPURAB,RPURAT,RPURDT,RPUPMJ,RPUSER,RPTDAY,RPJOBN,RPPID)"
+ " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
try{
session = JINSHUIjinshuiSessionFactory.openSession();
session.doWork(new Work() {
@Override
public void execute(Connection conn) throws SQLException {
PreparedStatement stmt = conn.prepareStatement(insertBjsFeedBackSql);
conn.setAutoCommit(false);
for(int i=0;i<bjsFeedBackList.size();i++){
stmt.setInt(1, bjsFeedBackList.get(i).getRpedln());
stmt.setString(2, bjsFeedBackList.get(i).getRpedbt());
stmt.setString(3, bjsFeedBackList.get(i).getRpivnNo());
stmt.setInt(4, bjsFeedBackList.get(i).getRpdoc());
stmt.setString(5, bjsFeedBackList.get(i).getRpdct());
stmt.setString(6, bjsFeedBackList.get(i).getRpkco());
stmt.setInt(7, bjsFeedBackList.get(i).getRplnid());
stmt.setString(8, bjsFeedBackList.get(i).getRpait());
stmt.setString(9, bjsFeedBackList.get(i).getRpnsp());
stmt.setString(10, bjsFeedBackList.get(i).getRprmk3());
stmt.setString(11, bjsFeedBackList.get(i).getRpirf());
stmt.setString(12, bjsFeedBackList.get(i).getRpurrf());
stmt.setBigDecimal(13, bjsFeedBackList.get(i).getRpag());
stmt.setBigDecimal(14, bjsFeedBackList.get(i).getRpatxn());
stmt.setBigDecimal(15, bjsFeedBackList.get(i).getRpstam());
stmt.setBigDecimal(16, bjsFeedBackList.get(i).getRpag1());
stmt.setBigDecimal(17, bjsFeedBackList.get(i).getRpatxn1());
stmt.setBigDecimal(18, bjsFeedBackList.get(i).getRpstam1());
stmt.setString(19, bjsFeedBackList.get(i).getRpev01());
stmt.setString(20, bjsFeedBackList.get(i).getRpurab());
stmt.setString(21, bjsFeedBackList.get(i).getRpurat());
stmt.setString(22, bjsFeedBackList.get(i).getRpurdt());
stmt.setString(23, bjsFeedBackList.get(i).getRpupmj());
stmt.setString(24, bjsFeedBackList.get(i).getRpuser());
stmt.setString(25, bjsFeedBackList.get(i).getRptday());
stmt.setString(26, bjsFeedBackList.get(i).getRpjobn());
stmt.setString(27, bjsFeedBackList.get(i).getRppid());
stmt.addBatch();
if(i%500 == 0){
stmt.executeBatch();
conn.commit();
}
}
stmt.executeBatch();
conn.commit();
stmt.close();
stmt = null;
}
});
}catch(Exception e){
flag = e.getMessage();
e.printStackTrace();
}finally{
session.close();
}