1. 工具类
package com.bjsxt.utils;
import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration;
/** * @ClassName:HibernateUtils * @Description: * @author mengqx * @date 2017年8月31日 */
public class HibernateUtils { // 创建数据库连接 private static String Config_File = "hibernate.xml"; private static Configuration configuration = null; private static SessionFactory sessionFactory = null; // 将session类存放在threadLocal中 ,每一次开session // 对象的时候,都将session对象放到(set方法)ThreadLocal。 // 使用的时候,使用get方法取出 private static ThreadLocal<Session> tl = new ThreadLocal<>();
// 当类一加载的就读取配置文件进行初始化操作 static { try { // 读取配置文件 configuration = new Configuration().configure(Config_File); // 创建会话工厂 sessionFactory = configuration. } catch (HibernateException e) { System.out.println("加载失败!"); e.printStackTrace(); } }
// 为了防止坏人入侵 private HibernateUtils(){}
public static Session getSession() { // 从ThreadLocal类中取得session对象 Session session = tl.get(); if (session == null) { if (sessionFactory != null) { // 创建一个session对象 session = sessionFactory.openSession(); // 将session对象存放到ThreadLocal类中 tl.set(session); return session; } } return session; }
public static void close() { // 从ThreadLocal类中取得Session对象。 Session session = tl.get(); // 给ThreadLocal类赋值为null。 tl.set(null); if (session != null) { session.close(); } }
}
|
测试:
/** * * @Description:测试工具类 * @author mengqx * @date 2017年8月31日 */ @Test public void getOne() { // 获得连接 Session session2 = HibernateUtils.getSession(); Stu stu = (Stu) session2.get(Stu.class, 1); System.out.println(stu); HibernateUtils.close(); }
/** * * @Description: save--添加,添加的时候:setId(null) update:更新 * @author mengqx * @date 2017年8月31日 */ @Test public void saveOrUpdate(){ Session session2 = HibernateUtils.getSession(); Stu stu = new Stu(); stu.setId(66); stu.setName("小金牙"); stu.setPwd("888"); // 开启事务 Transaction transaction = session2.beginTransaction(); try { session2.saveOrUpdate(stu); transaction.commit(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); transaction.rollback(); }finally{ HibernateUtils.close(); } }
|