好吧,今天问一个Hibernate大批量数据插入的问题。
前些日子又遇到一个问题。
解析csv文件,
插入数据库,
直接使用session.createSQLQuery()的原生sql插入:insert into
大致6W条数据,用了2min。表没有外键关联。
然后问了下,被告知,速度还是很慢,要求去网上找些sql数据库批量插入数据优化的方法。
于是度娘之,测试之,可惜都没有有效的方法。
所以我又来求助了,请问有啥优化的方法嘛?
尝试用下Hibernate的Batch Insert(参考http://www.tutorialspoint.com/hibernate/hibernate_batch_processing.htm):
Session session = SessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Employee employee = new Employee(.....);
session.save(employee);
if( i % 50 == 0 ) { // Same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
tx.commit();
session.close();
然后还需要在配置文件中配置下hibernate.jdbc.batch_size,它的值与上面的值相等:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- Assume students is the database name -->
<property name="hibernate.connection.url">
jdbc:mysql://localhost/test
</property>
<property name="hibernate.connection.username">
root
</property>
<property name="hibernate.connection.password">
root123
</property>
<property name="hibernate.jdbc.batch_size">
50
</property>
<!-- List of XML mapping files -->
<mapping resource="Employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。