工具类+静态代码实现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项目中一般不关闭这个,因为用的是静态代码块,关闭后之后就无法重新使用了 } }