Java批量数据库操作,如何性能优化

2025-03-23 08:47:14
推荐回答(1个)
回答1:

List list = new ArrayList();

for(int i=0;iStudent st = (Student)list.get(i);

Object o = getHibernateTemplate().get(Student.class, st.getStudentId());

if(null == o){
...

Address addr = new Address();
...

getHibernateTemplate().saveOrUpdate(addr);

getHibernateTemplate().saveOrUpdate(o);

getSession().flush();
getSession().evict(addr);
getSession().evict(o);
} else {
...
Address addr = methodForFindAddr(o);
...
getHibernateTemplate().saveOrUpdate(hql);

getHibernateTemplate().saveOrUpdate(o);

getSession().flush();
getSession().evict(addr);
getSession().evict(o);
}

}

现在实现如上面代码所示,如果list数据量比较小的话,还可勉强凑合,若超过数万条数据,需耗费大量时间,有什么好的建议对此进行优化?

我曾试两种方法:1.过线程池的方式,可方法methodForFindAddr可能会出现同步问题,线程之间数据串了。
2.将所有saveOrUpdate的对象抽取出来,循环批量保存,每循环50次,flush一次。可是两个循环耗费的时间仍然很长。