在完成session获取的过程中,主要涉及Configuration、SessionFactory、Session接口。
获取的代码:
SessionFactory sessionFactory = config.buildSessionFactory();
SessionFactory接口:负责初始化Hibernate,并负责创建Session对象。这里用到了工厂模式,但是SessionFactory并不是轻量级的,因为在一般情况下,一个项目通常只需要一个SessionFactory就足够了,当需要操作多个数据库时,可以定义多个SessionFactory。
具体代码如下:
package com.zrrd.wangziq.controller;
import org.springframework.context.annotation.Configuration;
public class HibernateUtils {
//声明一个私有的静态final类型的Configuration
private static final Configuration config;
//声明一个私有的静态final类型的SessionFactory对象
private static final SessionFactory factory;
//通过静态代码块构建SessionFactory
static{
config=new Configuration().configure();
factory=config.buildSessionFactroy();
}
//提供一个公有的静态方法供外部获取,并返回一个Session对象
public static Session getSession(){
return factory;
}
}
为每一个用户访问都创建一个Session,避免了不同用户之间的Session冲突;
在每一次程序运行的周期内,共用一个Session,既可以避免资源浪费,有提供了资源的共享,让一次运行的多个操作共用一个Session资源,为事务的操作也提供了基础。
public class TestDemo {
@Test
public void selectStu(){
Session session = HibernateUtils.getSession();
Transaction t = session.beginTransaction();
Student s = (Student) session.get(Student.class,2);
System.out.println(s.toString());
}
}
这样会减少sessionfactory的负担,因为每个session对象只会创建一次,避免了sessionfactory的多次加载。