package com.hbsi.hibernate.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public final class HibernateUtil {
private static SessionFactory sessionFactory;
private HibernateUtil() {
}
static {
// 使用hibernate完成将对象存入表中
Configuration cfg = new Configuration();// 设置配置对象
cfg.configure();// 用来完成hibernate的初始化----读取配置文件,里面的参数表示配置文件的位置,如果配置文件名字与路径均为现在这样,参数省略
// SessionFactory对象----相当于DriverManager驱动器管理器
sessionFactory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession() {
return sessionFactory.openSession();
}
//删除
public static void delete(Object obj) {
Session session = null;
Transaction tx = null;
try {
// 获取到session对象
session = HibernateUtil.getSession();
tx = session.beginTransaction();// 开启事务并且返回该事务对象
session.delete(obj);// 此时处于瞬时状态
tx.commit();
} finally {// 保证资源得到释放
if (session != null) {
session.close();
}
}
}
//更新
public static void update(Object obj) {
Session session = null;
Transaction tx = null;
try {
// 获取到session对象
session = HibernateUtil.getSession();
tx = session.beginTransaction();// 开启事务并且返回该事务对象
session.update(obj);
tx.commit();
} finally {// 保证资源得到释放
if (session != null) {
session.close();
}
}
}
//添加
public static void add(Object obj) {
Session session = null;
Transaction tx = null;
try {
// 获取到session对象
session = HibernateUtil.getSession();
tx = session.beginTransaction();// 开启事务并且返回该事务对象
session.save(obj);
tx.commit();
} finally {// 保证资源得到释放
if (session != null) {
session.close();
}
}
}
// 查找
public static Object get(Class clazz, int id) {
// 查询不需要事务
Session session = null;
try {
// 获取到session对象
session = HibernateUtil.getSession();
Object obj = session.get(clazz, id);
/*
* Class clazz=User.class;//user类型所对应的class对象 User user=(User)
* session.get(clazz, id);
*/// 第一个参数是一个class类型的参数,第二个参数是id
/*
* User user=(User) session.load(clazz,
* id);//懒加载,这句话没有访问数据库,返回的是一个代理对象,代理对象永远不为空
* System.out.println(user.
* getId()+"----"+user.getName());//第一个使用会连接数据库,就不会再抛异常了
*/
return obj;
} finally {// 保证资源得到释放
if (session != null) {
session.close();
}
}
}
}
update()方法和saveOrupdate()方法可以把对象从脱管状态变成了持久状态