onlyliuxin / coding2017

218 stars 643 forks source link

Hibernate框架批量插入数据的常用方式及getCurrentSesssion与openSession的区别 #515

Open SJshenjian opened 7 years ago

SJshenjian commented 7 years ago

`Session session=sessionFactory.openSession(); Transaction tx=session.beginTransaction(); //批量插入房源信息(按列) for(int i=first; i<=last; i+=100){ if(i / 1000 == 0) {//不足四位,需位数调整 StringBuilder houseNum = new StringBuilder(); houseNum.append("0").append(i); house.setHouseNum(houseNum.toString()); }else { String houseNum =String.valueOf(i); house.setHouseNum(houseNum); } session.save(house); session.flush(); session.clear();//不清空会只插入最后一个数据,为啥不能用getCurrentSession,求优化的方式 } tx.commit(); session.close();``

KevinLanK commented 7 years ago

getCurrentSession是绑定线程的,绑定当前线程,而且会在事务结束自动关闭,也就是不需要close方法。openSession是打开一个新的Session,不绑定,需要手动关闭。然后优化的话,只是提个建议,不一定有你现在的方法快,循环每一次都要新建好几个对象,你可以试试建一个对象,每次覆盖试试,当然不能新建String对象,因为String对象是不可变的。