hibernate sessionfactory 单例模式

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    //定义常量是为了实现单例,不让随便new
    //ThreadLocal<Session>不是集合,是线程锁,为了单线程安全
    private static final ThreadLocal<Session> lock = new ThreadLocal<Session>();
    
    private static final SessionFactory factory = buildFactory();
    private static SessionFactory buildFactory() {
        Configuration cfg = new Configuration().configure();//读取 hibernate.cfg.xml 的配置信息
        return cfg.buildSessionFactory();
    }
    
    public static Session getSession() {
        //先获取线程锁中的session
        Session session = lock.get();
        
        if (session == null) {//如果没有session就新建一个session赋值给lock
            session = factory.openSession();
            lock.set(session);
        }
        
        return session;
    }
    public static void closeSession() {   
        Session session = lock.get();//先获取线程锁中的session
        
        if (session != null) {//如果session有值,那么关闭session
            session.close();
            lock.set(null);    //将session关闭之后再给lock赋值null,方便其他线程使用    
        }
    }
    
}
复制代码

调用这个类的方法

复制代码
package com.itnba.maya.test;

import java.util.List;

import org.hibernate.*;

import com.itnba.maya.model.Fruit;
import com.itnba.maya.model.HibernateUtil;

public class BB {

    public static void main(String[] args) {
        Fruit data = new Fruit();
        data.setIds("s003");
        data.setName("芒果");
        data.setSource("不知道");
        data.setPrice(12.0);
        data.setNumbers(100);
        data.setImage("没有");
        
        Session session=null;
        try{
            session=HibernateUtil.getSession();
            session.beginTransaction();
            session.save(data);
            session.getTransaction().commit();
        }catch (Exception e) {
            session.getTransaction().rollback();
        }finally {
            HibernateUtil.closeSession();
        }    
    }

}
复制代码

运行结果

猜你喜欢

转载自blog.csdn.net/qq_36937005/article/details/80665266
今日推荐