Configuration:
作用一:
默认加载hibernate配置文件
//获得配置对象并加载配置文件 Configuration configure = new Configuration().configure(); |
configure()方法内部实现如下:
public Configuration configure() throws HibernateException {
} |
public Configuration configure(String resource) throws HibernateException {
} |
通过以上源码,我们可以知道,configure()内部加载读取hibernate.cfg.xml文件的位置,默认是在src目录下。并且加载时是通过一个封装的字节输入流方法来读取该指定位置上的配置文件信息,并返回doConfigure()方法的返回值 |
1.加载流:
我们再来看一下getConfigurationInputStream( resource )方法的内部实现:
protected InputStream getConfigurationInputStream(String resource) throws HibernateException {
} |
该方法内部调用了config工具类ConfigHelper的getResourceAsStream( resource )方法 |
ConfigHelper:
public static InputStream getResourceAsStream(String resource) {
} |
2.返回值doConfigure(stream, resource)
protected Configuration doConfigure(InputStream stream, String resourceName) throws HibernateException { try {
} |
加载指定路径下的配置文件:
//获得配置对象 Configuration configure = new Configuration("/com/zrgk/util/hibernate.cfg.xml"); |
如所示,通过指定路径加载相关的配置文件 其他方式加载配置文件方法如下所示: |
我们也可以手动指定实体映射配置文件的加载,而不需要在hibernate.cfg.xml中添加相应配置,如下: |
Configuration configure = new Configuration().configure("/com/zrgk/util/hibernate.cfg.xml").addResource("com/zrgk/pojo/User.hbm.xml");
其中要注意一点:User.hbm.xml的路径不能以“/”开头,因为addResource()方法内部没有对该情况进行判断 通过这个,我们也可以发现,这是一种链式编程,而configure()内部返回this,正是这种编程方式的代码体现 |
作用二:
获得SessionFactory工厂
//获得会话工厂 SessionFactory sessionFactory = configure.buildSessionFactory(); |
源码: public SessionFactory buildSessionFactory() throws HibernateException {
} |
通过源码,我们只需要知道,最终返回的是SessionFactory的子类实现,并将configure对象封装进了该子类的对象 |