首页 > 代码库 > [Hibernate系列—] 2. 创建SessionFactory 与 Session

[Hibernate系列—] 2. 创建SessionFactory 与 Session

Configuration 对象创建

要创建SessionFactory , 首先要创建Configuration 对象。

这个对象就是去读取hibernate 的一些配置信息。

默认状况下, hibernate会到 classPath 目录下加载hibernate.cfg.xml 文件。

这里延续上一篇的例子:

[Hibernate系列—] 1. 下载与试用Hibernate(MySQL与Oracle 配置)

在Eclipse 中进行开发。


这个配置文件的方式可以有多种, 可以是xml , 可以是properties , 也可以直接在代码中写配置。


方式1.  在src 目录下放入  hibernate.cfg.xml, 类似上篇的例子

方式2.  在 src 目录下放入 hibernate.properties

内容如下:

hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/test
hibernate.connection.username=root
hibernate.connection.password=123456
#hibernate.hbm2ddl.auto=create

可以看出, 这种方式无法添加 User.hbm.xml 的配置, 所以可以在代码中添加:

		Configuration configuration = new Configuration().addResource("com/oscar999/Usr.hbm.xml");

方式3.  可以直接在代码中进行设置, 类似

		Configuration configuration = new Configuration().addResource("com/oscar999/Usr.hbm.xml")
				.setProperty("hibernate.connection.driver_class","com.mysql.jdbc.Driver")
				.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/test")				
				.setProperty("hibernate.connection.username", "root")
				.setProperty("hibernate.connection.password", "123456")
				.setProperty("hibernate.dialect","org.hibernate.dialect.MySQLDialect")
				.setProperty("hibernate.hbm2ddl.auto", "update");
也可以通过

Configuration configuration = new Configuration().addClass(com.oscar999.Usr.class)
添加映射文件。


一般状况下, 添加 hibernate.cfg.xml 会比较常用, .properties 和 .xml 也可以并存。


除此之外, 如果不想使用默认的文件名, 也可以这样:

File file = new File("src/com/oscar999/myhibernate.xml");  
Configuration config = new Configuration();  
config.configure(file);  


SessionFactory 对象的创建

Configuration 创建完成之后, 接下来就是创建 SessionFactory 了。

在Hibernate 3中,创建SessionFactory 的方式是:

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

但是在, Hibernate 4 中, 这种方法已经过时了。

目前推荐的使用方式是:

		ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
				.applySettings(configuration.getProperties()).build();
		SessionFactory sessionFactory = configuration
				.buildSessionFactory(serviceRegistry);
至于为什么要使用这种方式, 可以参考:

http://planet.jboss.org/post/hibernate_orm_service_registry


session 的使用

sessionFactory 有了, 接下来就简单了,直接贴一个例子


		Configuration configuration = new Configuration().addClass(com.oscar999.Usr.class);
		ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
				.applySettings(configuration.getProperties()).build();
		SessionFactory sessionFactory = configuration
				.buildSessionFactory(serviceRegistry);
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		session.save(new Usr("uesr3"));
		session.getTransaction().commit();
		session.close();
		sessionFactory.close();

需要注意的就是, 记得关闭Session 和 SessionFactory