批处理

发表时间:2017-05-17 17:30:38 浏览量( 26 ) 留言数( 0 )

学习目标:

1、搭建Hibernate的批处理


学习过程:

有个客户提供个了大量数据,需要导入到数据库中,要用什么方法才能提高导入的效率呢?我们可以看看三种实现方法。对比它们之间的效率。实现代码如下:

public class Run5 {

	// 一般不要这样做
	public void addEmployees1(List<Employee> employees) {
		for (Employee employee : employees) {

			Session session = HibernateUtil.getSessionFactory().getCurrentSession();

			// 开启一个事务
			session.beginTransaction();

			session.save(employee);

			session.getTransaction().commit();
			session.close();

		}
	}

	public void addEmployees2(final List<Employee> employees) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		// 开启一个事务
		session.beginTransaction();
		for (int i = 0; i < employees.size(); i++) {

			session.save(employees.get(i));
			if (i % 50 == 0) {
				session.clear();
				session.flush();
			}

		}
		session.getTransaction().commit();
		session.close();

	}

	public static void main(String[] args) {
		
		Run5 run=new Run5();

		List<Employee> employees = new ArrayList<Employee>();

		for (int i = 0; i < 10000; i++) {
			Employee employee = new Employee();
			employee.setEmployeeName("liu" + i);

			employees.add(employee);
		}

		Date begin = new Date();

		run.addEmployees2(employees);
		Date end = new Date();
		System.out.println("总时间" + (end.getTime() - begin.getTime()) + "毫秒");
	}
}

   分别调用并记录时间。可见如果使用hibernate那么最好每50条左右就清空一下session,这样就不会导致内存溢出等问题,也可以提高效率,但是不管怎么样就比不上原始的jdbc的实现。