封装Session对象的操作
public class HFUtil {
//创建一个全局的SessionFactory对象
private static SessionFactory sf=null;
//定义一个线程的局部变量 这个变量用于唯一的标识一个线程
private static ThreadLocal<Session> threadLocal=new ThreadLocal<>();
static {
sf=new Configuration().configure().buildSessionFactory();
}
//获取session
public static Session getSession() {
//判断当前线程是否拥有session
Session session=threadLocal.get();
if(null==session) {
session=sf.openSession();
threadLocal.set(session);
}
//session.beginTransaction();
return session;
}
//关闭
public static void colse() {
//判断当前线程是否拥有session
Session session=threadLocal.get();
if(null!=session) {
//session.getTransaction().commit();
session.close();
}
}
private HFUtil() {
// TODO Auto-generated constructor stub
}
}
如果想代码更简洁,可以把session的事务开启和提交也进行封装。
session.beginTransaction();
session.getTransaction().commit();
封装增删查改工具类
public class HibernateUtil {
private HibernateUtil() {
}
//增
public static void insert(Object object) {
Session session=HFUtil.getSession();
session.beginTransaction();
session.save(object);
session.getTransaction().commit();
HFUtil.colse();
}
//删
public static void delete(Object object) {
Session session=HFUtil.getSession();
session.beginTransaction();
session.delete(object);
session.beginTransaction();
HFUtil.colse();
}
//改
public static void update(Object object) {
Session session =HFUtil.getSession();
session.beginTransaction();
session.update(object);
session.beginTransaction();
HFUtil.colse();
}
//查
public static <T> T select(int id ,Class clazz) {
Session session=HFUtil.getSession();
T t=(T) session.get(clazz,id);
HFUtil.colse();
return t;
}
}