为了创建一个SessionFactory,你在程序初始化的时候创建一个单实例的Configuration,这个对象用来指定映射文件的位置。配置完之后,这个Configuration对象被用来创建SessionFactory。一旦你成功创建SessionFactory之后,你就不再需要Configuration对象了。
下面的代码用来启动Hibernate:
Configuration cfg=new Configuration();
cfg.addResource(“hello/Message.hbm.xml”);
cfg.setProperties(System.getProperties());
SessionFactory sessions=cfg.buildSessionFactory();
映射文件的位置是相对于应用程序的classpath的。
按照约定,Hibernate的映射文件的后缀名都是hbm.xml。另外一个约定是每个类对应一个映射文件,如果把多个类的映射放到同一个文件中,那整个代码将变得无比混乱。
Hibernate推荐我们将类和它的映射文件放在同一个目录下,就像之前的Message类,需要将它的映射文件也放在hello文件下。如果我们写了另外一个持久化类,那么我们将为其定义属于它自己的映射文件。有些框架推荐几种管理映射文件的方式,例如Struts,它的配置文件struts-config.xml,当配置数据越来越多的时候,维护这样的文件将是一个噩梦。通过addResource方法来加载你需要的映射文件。当然,如果你按照我们刚才的建议来完成类和映射文件的话,你也可以通过addClass方法,把持久化类作为方法的参数就好了。
SessionFactory sessions = new Configuration().addClass(org.hibernate.aution.model.Item.class).setProperties(System.getProperties()).buildSessionFactory();
一般情况下,在你的程序中创建一个SessionFactory即可,除非你同时要支持多个数据库,这时你就需要多个SessionFactory,每个SessionFactory对应其中的一个数据库。
当然,配置Hibernate并不仅仅是找到它的映射文件的位置就行了,其实你需要做更多的事情,例如如何获得数据库的连接。关于Hibernate配置的选项很多,但是不用担心,很多配置都提供了默认的选项,只有一小部分需要你去手动修改。
为了能够指定你要修改的选项,你可以使用以下的技术
- 为Configuration.setProperties方法传递一个java.util.Properties实例。
- 设置系统属性java -Dproperty=value
- 在classpath上放置一个hibernate.properties文件
- 在hibernate.cfg.xml中包含属性
第一种和第二种放在只有在测试中才会被使用,通常情况下你会需要一个固定的配置文件。hibernate.cfg.xml和hibernate.properties的功能都是配置Hibernate,你可以根据自身的需要来选择使用其中的一种文件,甚至你也可以混用它们,在后面我们将看到这方面的例子。
一个不太常用的选项是可以在创建Session的时候提供一个JDBC的连接,这样你可不用指定任何关于数据库连接的选项,但是我们并不推荐这么做。
在所有的配置选项中,数据库连接的选项应该是最重要的。关于数据库连接的配置在不同的环境中是不一样的,在下面我们将分别进行说明。首先来看一下非管理环境。