package com.ckinghan.utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
public class HibernateUtils {
//定义SessionFactory变量
private static SessionFactory buildSessionFactory;
//当虚拟机加载时,加载配置文件,并创建SessionFactory
static{
Configuration configuration = new Configuration().configure();
buildSessionFactory = configuration.buildSessionFactory();
//创建任务,当虚拟机关闭时,释放SessionFactory
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("当虚拟机关闭时,释放SessionFactory");
buildSessionFactory.close();
}
}));
}
//返回一个的Session
public static Session openSession(){
return buildSessionFactory.openSession();
}
//获取与当前线程绑定的Session
public static Session getCurrentSession(){
return buildSessionFactory.getCurrentSession();
}
}
编写测试类:
package com.ckinghan.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import org.junit.Test;
import com.ckinghan.bean.User;
import com.ckinghan.utils.HibernateUtils;
public class HibernateUtilsTest {
/**
* 测试HibernateDBUitls工具类
*/
@Test
public void hibernateDBUtilsTest(){
//通过工具类获取绑定当前线程的Session
Session session = HibernateUtils.getCurrentSession();
//启动事务
Transaction transaction = session.beginTransaction();
//通过Session创建Criteria
Criteria criteria = session.createCriteria(User.class);
//通过list方法执行SQL语句获取结果集
List<User> list = criteria.list();
//输出查询结果
System.out.println(list);
//提交事务
transaction.commit();
}
}
测试结果如下 :
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Hibernate:
select
this_.id as id0_0_,
this_.userName as userName0_0_,
this_.password as password0_0_
from
user this_
[User [id=1, userName=0, password=password123], User [id=2, userName=0, password=password123]]
当虚拟机关闭时,释放SessionFactory