1.从Hibernate.cfg.xml文件中读取配置信息,并创建SessionFactory
/*用默认配置文件构建Configuration*/
Configuration cfg=new Configuration().configure();
/*手动指定配置文件*/
Configuration cfg=new Configuration().configure(“config.xml”);
/*读取过程
new Configuration():Configuration是hibernate的入口,在实例化的同时hibernate会在classpath中查找hibernate.properties文件,如果文件存在,则将该文件的内容加载到GLOBAL_PROPERTIES中,并验证文件内容的有效性,如果存在不支持的配置参数,则打印警告信息,如果不存在,则打印hibernate.properties not found。
configure():hibernate会在classpath中查找hibernate.cfg.xml文件,如果文件不存在,则打印hibernate.cfg.xml not found。如果文件存在,则进行内容解析,首先访问<session-factory>的子元素,访问顺序为:<property>—<mapping>—<jcs-class-cache>—<jcs-collection-cache>—<collection-cache>
如果hibernate.properties和hibernate.cfg.xml两个文件同时存在,则hibernate.cfg.xml会覆盖hibernate.properties文件中相同的配置信息
*/
/*
SessionFactory属于非轻量级的对象,也就是说一般一个数据库共享一个SessionFactory即可,线程是安全的。而Session是不安全的,所以每个操作都可以共用一个SessionFactory得到Session。
构建SessionFactory要在静态块里,因为它只在类被加载时执行一次
static SessionFactory sessionFactory;
static{
try{
Configuration cfg=new Configuration().configure();
sessionFactory=cfg.buildSessionFactory();
}
}
*/
SessionFactory sessionFactory = cfg.buildSessionFactory();
2、从SessionFactory中得到Session
Session session = sessionFactory.openSession();
3、开启事务
Transaction tx = session.beginTransaction();
4、持久化操作
Teacher teacher=new Teacher(); //实例化一个对象,因为未通过session与数据库发生关联,所以此时teacher处于瞬时状态
session.save(teacher);//通过session与数据库发生关联,此时teacher处于持久化状态
/*
在进行持久化操作时,hibernate 会自动在配置文件中<mapping>的子元素中找出Teacher.hbm.xml的位置并读取其配置信息,根据<class>元素对对象进行持久化操作。
*/
5、提交事务
tx.commit();
6、关闭Session
session.close(); //session关闭,此时teacher与数据库断开关联处于游离状态也称脱管状态
7、关闭SessionFactory
sessionFactory.close();