一直很抵触hibernate,原因不多说,总知是能不用就不用。最近项目有大量数据导入的需求,一直出现连续导入10w左右就内存溢出之类的情况,开启事物,分页flush session还是挺慢,换对象为SQL,拼装语句块直接执行效果也不理想。看到网上说的使用传统批处理速度要高10倍左右,于是试了试,还算可以。

由于项目其他地方有采用hibernate,甚至还用了iBATIS,不能随意更换框架或者改动接口。

网上很多采用sessionFactory.connection();获取Connection的文章,用过的朋友可能就知道,这个方法在Hibernate3.3.2版本中已被弃用。
替代方法:SessionFactoryUtils.getDataSource(sessionFactory).getConnection();
也可以直接使用:((SessionFactoryImplementor)sessionFactory).getConnectionProvider().getConnection();

获取到Connection后就好说了,做法完全是传统Jdbc的。通过这个方法单独实现一个大批量插入的接口也不是什么难事了,这里不再赘述。