工具类+静态代码实现Hibernate的配置

package hiber1;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HiberTool {
	static Configuration cfg = null;
	static SessionFactory sessionF = null;
	
	static {
		cfg = new Configuration();
		cfg.configure();
		sessionF = cfg.buildSessionFactory();
	}
	
	public static SessionFactory getSessionFactory() {
		return sessionF;
	}
}



由于静态代码块只会运行一次,因此可以节约运行资源.
由此,数据库的注入类也需要做一些变动:
package hiber1;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.jupiter.api.Test;

public class HibernateTest {
	@Test
	public void add() {
		//第一步:加载Hibernate核心配置文件
		Configuration cfg = new Configuration();
		//在src下找到*.cfg.xml文件
		cfg.configure();
		
		//第二步:创建SessionFactory对象
		//读取Hibernate核心配置文件内容,创建SessionFactory
		//在过程中,根据映射关系,在数据库中把表格创建
		//SessionFactory sessionF = cfg.buildSessionFactory();//SessionFactory类的示例很占用资源,一般全程只用一个对象
		
		SessionFactory sessionF = HiberTool.getSessionFactory();//(重点在此)使用静态代码块
		
		
		//第三步:使用对象sessionF创建session对象(类似于连接)
		Session session = sessionF.openSession();
		
		//第四步:开启事务
		Transaction tx = session.beginTransaction();
		
		//第五步:写具体的逻辑crud操作
		//演示:添加功能
		User user = new User();
		user.setUsername("小李");
		user.setPassword("250");
		user.setAddress("日本");
		session.save(user);//调用session方法实现添加
		
		
		
		//第六步:提交事务(太奇怪了,有了这句就无法通过测试,注销就好了,难道是因为我用的是oracle?)
		tx.commit();
		
		//第七步:关闭资源
		session.close();
		sessionF.close();//web项目中一般不关闭这个,因为用的是静态代码块,关闭后之后就无法重新使用了
		
		
		
		
	}

}

猜你喜欢

转载自vaxvall.iteye.com/blog/2409333