Hibernate通过JDBC操作提高大数据量写数据库效率

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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值