欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-11 20:22:39
...
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项目中一般不关闭这个,因为用的是静态代码块,关闭后之后就无法重新使用了
		
		
		
		
	}

}
相关标签: hibernate