1.读取并解析配置文件hibernate.cfg.xml, 这是使用hibernate框架的开始,由configuration对象来完成
Configuration config=new configuration().configure();可以在MySessionFactory类中完成。
package me.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
final public class MySessionFactory {
private static SessionFactory sessionFactory=null;
private MySessionFactory() {
//该类不能被外部实体化
}
static {//静态块优先执行
sessionFactory = new Configuration().configure().buildSessionFactory();//得到一个对象
}
public static SessionFactory getSessionFactory() {
return sessionFactory;//返回该对象
}
}
2.读取并解析映射信息,调用config.buildSessionFactory();来创建SessionFactory对象。创建和销毁都想当耗费资源,通常一个系统只创建一个实例。
3.开启Session,Session session=sf.openSession();
package me.dao;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import me.domain.Student;
import me.util.MySessionFactory;
public class StudentDao {
private SessionFactory factory;
public StudentDao(){
factory=MySessionFactory.getSessionFactory();
}
public void insertStudent(Student stu) throws Exception{
Session session=null;
try {
//开启session
session=factory.openSession();
//开启事务
session.beginTransaction();
session.save(stu);
//提交事务
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//回滚事务
session.getTransaction().rollback();
}finally {
if (session!=null) {
if (session.isOpen()) {
//关闭session
session.close();
}
}
}
}
public List queryAllStudents()throws Exception {
List<Student> list=new ArrayList<Student>();
Session session=null;
try {
session=factory.openSession();
String hql="from Student as s";
Query<Student> query=session.createQuery(hql);
list=query.getResultList();
} finally {
if (session!=null) {
session.close();
}
}
return list;
}
}
4.创建并启动事务,Transition tx=session.beginTransition();。
5.通过Session 提供的方法,执行数据的持久化操作。
6.提交事务tx.commit();, 如果数据库操作失败,则需要回滚rollback();。
7.关闭Session, session.close(); , 如果不再使用hibernate, 还需要关闭SessionFactory。