//学习Configuration对象 //Configuration功能: 配置加载类.用于加载主配置,orm元数据加载 //---------------------------------------------------- //学习SessionFactory对象 // SessionFactory功能: 用于创建操作数据库核心对象session对象的工厂. // 简单说功能就一个---创建session对象 //注意:1.sessionfactory 负责保存和使用所有配置信息.消耗内存资源非常大. // 2.sessionFactory属于线程安全的对象设计. //结论: 保证在web项目中,只创建一个sessionFactory. //---------------------------------------------------- public class Demo { @Test public void fun1(){ //1 创建,调用空参构造 Configuration conf = new Configuration(); //2 读取指定主配置文件 => 空参加载方法,加载src下的hibernate.cfg.xml文件 conf.configure(); //以上两步可以合起来Configuration conf = new Configuration().configure(); //3 读取指定orm元数据(扩展),如果主配置中已经引入映射配置.不需要手动加载 //conf.addResource(resourceName); //conf.addClass(persistentClass); //4 根据配置信息,创建 SessionFactory对象 SessionFactory sf = conf.buildSessionFactory(); //5 获得session //打开一个新的session对象 Session session = sf.openSession(); //6获得操作事务的tx对象 //Transaction tx = session.getTransaction(); //开启事务并获得操作事务的tx对象(建议使用) Transaction tx2 = session.beginTransaction(); //---------------------------------------------- 操作数据库 //---------------------------------------------- tx2.commit();//提交事务 tx2.rollback();//回滚事务 session.close();//释放资源 sf.close();//释放资源 } }
抽取的工具类
HibernateUtils.java
public class HibernateUtils { private static SessionFactory sf; static{//保证里面的代码只执行一次 //1 创建,调用空参构造 Configuration conf = new Configuration().configure(); //2 根据配置信息,创建 SessionFactory对象 sf = conf.buildSessionFactory(); } //获得session => 获得全新session public static Session openSession(){ //3 获得session Session session = sf.openSession(); return session; }
//获得session => 获得与线程绑定的session public static Session getCurrentSession(){ //3 获得session Session session = sf.getCurrentSession(); return session; } }
注意1:调用getCurrentSession方法必须配合主配置中的一个属性使用
<property name="hibernate.current_session_context_class">thread</property>
注意2:通过getCurrentSession方法获得的session对象,当事务提交时,session会自动关闭,不要手动调用close