Hibernate通过配置文件构建org.hibernate.Session对象的方式与使用范例源代码
Posted leeon_l
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate通过配置文件构建org.hibernate.Session对象的方式与使用范例源代码相关的知识,希望对你有一定的参考价值。
Hibernate通过配置文件构建org.hibernate.Session对象的方式
1、创建 org.hibernate.cfg.Configuration对象configuration;
2、调用configuration对象的configure(path)方法加载配置文件,参数为Hibernate核心配置文件hibernate.cfg.xml的位置路径;
3、调用加载过配置文件的configuration对象的buildSessionFactory()方法获取org.hibernate.SessonFactory对象sessionFactory;
4、一般情况下调用sessionFactory对象的openSession()方法获取org.hibernate.Session对象session(特殊情况如本例所示通过ThreadLocal管理session,避免session频繁创建与销毁);
——————到此,session构建成功,具体使用时还有如下步骤:
5、涉及事务管理时,调用session的beginTransaction()方法获取org.hibernate.Transaction对象transaction;
6、进行具体的数据库增删改查操作;
7、进行事务管理操作,如提交事务transaction.commit();
8、关闭session,session.close();
HibernateSessionFactory类代码(带详细注释):
<span style="font-size:14px;">import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
/*
* Hibernate通过配置文件构建org.hibernate.Session对象的方式
* 1、创建 org.hibernate.cfg.Configuration对象configuration;
* 2、调用configuration对象的configure(path)方法加载配置文件,参数为Hibernate核心配置文件hibernate.cfg.xml的位置路径;
* 3、调用加载过配置文件的configuration对象的buildSessionFactory()方法获取org.hibernate.SessonFactory对象sessionFactory;
* 4、一般情况下调用sessionFactory对象的openSession()方法获取org.hibernate.Session对象session(特殊情况如本例所示通过ThreadLocal管理session,避免sess<span style="white-space:pre"> </span>ion频繁创建与销毁);
*
* ——————到此,session构建成功,具体使用时还有如下步骤:
* 5、涉及事务管理时,调用session的beginTransaction()方法获取org.hibernate.Transaction对象transaction;
* 6、进行具体的数据库增删改查操作;
* 7、进行事务管理操作,如提交事务transaction.commit();
* 8、关闭session,session.close();
*/
public class HibernateSessionFactory
//配置文件位置(相对路径)
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
//使用线程局部变量TreadLocal管理session,它为每一个线程提供一个session对象的副本
//可以结合过滤器实现保持登录状态,结合监听器实现session状态变化与session值的更新
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
//用于加载配置文件
private static Configuration configuration = new Configuration();
//声明Hibernate的session工厂类对象
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
//静态块,类加载时执行
static
try
//加载配置文件
configuration.configure(configFile);
//创建Hibernate的session工厂对象
sessionFactory = configuration.buildSessionFactory();
catch (Exception e)
//输出错误信息
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
private HibernateSessionFactory()
//定义获取session对象的方法(通过ThreadLoacl)
public static Session getSession() throws HibernateException
//通过threadLocal的get方法获取当前线程的session对象
Session session = (Session) threadLocal.get();
//判断session状态
if (session == null || !session.isOpen())
if (sessionFactory == null)
//重建sessonFactory
rebuildSessionFactory();
//通过openSession方法获取session对象
session = (sessionFactory != null) ? sessionFactory.openSession(): null;
//将session交由threadLocal管理
threadLocal.set(session);
return session;
//定义sessionfactory的重建方法
public static void rebuildSessionFactory()
try
//再次加载配置文件
configuration.configure(configFile);
//再次创建sessionFactory对象
sessionFactory = configuration.buildSessionFactory();
catch (Exception e)
//输出错误信息
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
//定义session关闭的方法
public static void closeSession() throws HibernateException
//通过threadLocal的get方法获取当前线程的session对象
Session session = (Session) threadLocal.get();
//将threadLocal置空
threadLocal.set(null);
if (session != null)
//关闭session
session.close();
//get/set方法
public static org.hibernate.SessionFactory getSessionFactory()
return sessionFactory;
public static void setConfigFile(String configFile)
HibernateSessionFactory.configFile = configFile;
sessionFactory = null;
public static Configuration getConfiguration()
return configuration;
</span>
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.sanqing.hibernate.HibernateSessionFactory;
import com.sanqing.po.Student;
import com.sanqing.po.Subject;
public class StudentDAOImpl implements StudentDAO
public Student findByStudentID(String studentID)
Session session = HibernateSessionFactory.getSession();
Student student = (Student) session.get(Student.class, studentID);
HibernateSessionFactory.closeSession();
return student;
public void updateStudent(Student student)
Session session = HibernateSessionFactory.getSession();
Transaction transaction = null;
try
transaction = session.beginTransaction();
session.update(student);
transaction.commit();
catch(Exception ex)
ex.printStackTrace();
transaction.rollback();
HibernateSessionFactory.closeSession();
public List<Student> findByStudentName(String studentName)
Session session = HibernateSessionFactory.getSession();
Query query = session.createQuery("from Student as stu where stu.studentName = ?");
query.setString(0, studentName);
List list = query.list();
HibernateSessionFactory.closeSession();
return list;
public List<Student> findByStudentClass(String sclass)
Session session = HibernateSessionFactory.getSession();
Query query = session.createQuery("from Student as stu where stu.sclass = ?");
query.setString(0, sclass);
List list = query.list();
HibernateSessionFactory.closeSession();
return list;
如果想深入学习SSH框架,可以先参看一个demo: 一个典型的SSH登录与增删改查demo详解+源代码
以上是关于Hibernate通过配置文件构建org.hibernate.Session对象的方式与使用范例源代码的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate通过配置文件构建org.hibernate.Session对象的方式与使用范例源代码