SSH与SSM学习之hibernate04——Configuration
一、Configuration主要方法说明
Configuration功能: 配置加载类.用于加载主配置,orm元数据加载
我们主要用到以下的方法
configure()
configure(String resource)
Configuration configure(URL url)
Configuration configure(File configFile)
都是加载配置的,我们主要看一下我们最常用的两个
configure()
configure(String resource)
查看我们的源码,是这定义的
Configuration
....
public Configuration configure() throws HibernateException {
return configure( StandardServiceRegistryBuilder.DEFAULT_CFG_RESOURCE_NAME );
}
public Configuration configure(String resource) throws HibernateException {
standardServiceRegistryBuilder.configure( resource );
// todo : still need to have StandardServiceRegistryBuilder handle the "other cfg.xml" elements.
// currently it just reads the config properties
properties.putAll( standardServiceRegistryBuilder.getSettings() );
return this;
}
....
DEFAULT_CFG_RESOURCE_NAME值
public class StandardServiceRegistryBuilder {
/**
* The default resource name for a hibernate configuration xml file.
*/
public static final String DEFAULT_CFG_RESOURCE_NAME = "hibernate.cfg.xml";
.....
}
所以如果我们的配置文件 hibernate.cfg.xml 在 src下,那么我们下面的两种方式是一样的
//下面的两行代码是一样的
conf.configure();
conf.configure("hibernate.cfg.xml");
我们的主配置文件绝大多数都是放在src 下的,所以一般都是上面两种方式加载配置的。
如果你放在 src其他目录下,需要写相对于 src下的相对位置。比如我现在的配置文件是在src/com下,那么我的添加配置应该如下
conf.configure("com/hibernate.cfg.xml");
二、Configuration例子
/**
* Configuration 配置一
*/
@Test
public void configurationDemo1(){
//Configuration功能: 配置加载类.用于加载主配置,orm元数据加载
//1 创建Configuration,调用空构造方法
Configuration conf = new Configuration();
//2 读取指定主配置文件 => 空参加载方法,加载src下的hibernate.cfg.xml文件
conf.configure();
//或者调用如下的方法,与上面是一样的
//sconf.configure("hibernate.cfg.xml");
//如果我们主配置文件是在com下面,那么应该是 conf.configure("com/hibernate.cfg.xml");
//3 根据配置信息,创建 SessionFactory 对象
SessionFactory factory = conf.buildSessionFactory();
//4 获取session
Session session = factory.openSession();
//5 开启事务
Transaction t = session.beginTransaction();
User user = new User("xiaoming",18);
//6 数据持久化
session.persist(user);
//7 提交事务
t.commit();
//8 关闭session
session.close();
}
三、推荐使StandardServiceRegistry
@Test
public void configurationDemo2(){
// 但在5.1.0版本汇总,hibernate则采用如下新方式获取:
// 1. 配置类型安全的准服务注册类,这是当前应用的单例对象,不作修改,所以声明为final
// 在configure("hibernate.cfg.xml")方法中,如果不指定资源路径,默认在类路径下寻找名为hibernate.cfg.xml的文件
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
// 2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂
SessionFactory factory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
//3 获取session
Session session = factory.openSession();
//4 开启事务
Transaction t = session.beginTransaction();
User user = new User("mingming",20);
//5 数据持久化
session.persist(user);
//6 提交事务
t.commit();
//7 关闭session
session.close();
}