package com.ask.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
/*
* 创建一个session对象
* 使用的是单例模式
*/
public class HibernateUtil {
//提供私有的对象
private static SessionFactory sessionFactory;
//提供一个私有的构造方法,避免给外界去创建对象
private HibernateUtil(){}
public static SessionFactory getSessionFactory(){
//加载hibernate的总配置文件
Configuration cfg=new Configuration().configure();
//注册serviceRegistry对象
ServiceRegistry serviceRegistry=
new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
//解决线程安全问题
if (sessionFactory==null) {
//使用同步锁解决多个线程创建对象
synchronized(HibernateUtil.class){
//解决:只能创建一次
if (sessionFactory==null) {
sessionFactory=cfg.buildSessionFactory(serviceRegistry);
}
}
}
return sessionFactory;
}
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
/*
* 创建一个session对象
* 使用的是单例模式
*/
public class HibernateUtil {
//提供私有的对象
private static SessionFactory sessionFactory;
//提供一个私有的构造方法,避免给外界去创建对象
private HibernateUtil(){}
public static SessionFactory getSessionFactory(){
//加载hibernate的总配置文件
Configuration cfg=new Configuration().configure();
//注册serviceRegistry对象
ServiceRegistry serviceRegistry=
new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
//解决线程安全问题
if (sessionFactory==null) {
//使用同步锁解决多个线程创建对象
synchronized(HibernateUtil.class){
//解决:只能创建一次
if (sessionFactory==null) {
sessionFactory=cfg.buildSessionFactory(serviceRegistry);
}
}
}
return sessionFactory;
}
}
本文介绍了一种使用Hibernate框架通过单例模式创建Session的方法。该方法首先加载Hibernate配置文件,然后注册ServiceRegistry对象,并使用同步锁确保SessionFactory仅被创建一次,从而提高系统的线程安全性。
1206

被折叠的 条评论
为什么被折叠?



