博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Hibernate创建SessionFactory对象的说明
阅读量:4261 次
发布时间:2019-05-26

本文共 2300 字,大约阅读时间需要 7 分钟。

一、加载hibernate的相关jar包(通过maven)

  1、通过maven来管理jar包,可以通过下列网址来搜索你想要的获取maven的坐标。
        
       如加载hiberante的坐标为
         
org.hibernate
hibernate-core
4.2.3.Final

 二、获取SessionFactory对象

    1、在4.0版本之前获取该对象的方法为:
        默认情况下Hibernate会去classPath下加载hibernate.cfg.xml文件,如果你没有采用默认的配置文件名,那么你就需要在configurate()方法里面带上你      的配置文件名,如temp.xml。注意路径正确
Configuration configuration = new Configuration().configure();		SessionFactory sessionFactory = configuration.buildSessionFactory();
 
  2、Hibernate4.0之后引入的新特性,Service Register机制。其配置情况如下:
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();     ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();     SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
         
但是在4.1之后的版本中,StandardServiceRegistryBuilder又被取消了,取而带之的做法是
Configuration configiguration = new Configuration().configure();          ServiceRegistryBuilder builder = new ServiceRegistryBuilder().applySettings(configiguration.getProperties());          ServiceRegistry registry = builder.buildServiceRegistry();           factory = configiguration.buildSessionFactory(registry);

  三、Service Register 机制

   1、ServiceRegistry 是 Service 的注册表, 它为Service提供了一个统一的加载 / 初始化 / 存放 / 获取机制. 
       首先看整个类图:
   整个 ServiceRegistry 结构和我们大家了解的 Classloader 的代理结构类似, 只不过和 Classloader 的首先代理给父节点,父节点找不到再从本级的 Classloader 中查找的策     略不同,ServiceRegistry 是先从本级节点查找,找不到再去父亲中查找。
可以看到hibernate里面的 ServiceRegistry实际上是由三层(范围)组成的:
----------------------BootstrapServiceRegistry:主要包括全局都要使用的基础服务
主要提供 Classloading 和 Service loading 服务, 供全局使用.
----------------------ServiceRegistry:【主要包括在 BootstrapServiceRegistry 之上的, 和Hibernate 相关的服务, 例如配置文件解析, JDBC, JNDI 等
标准的ServiceRegistry, 同样服务于全局, 在初始化这个Registry中的服务的时候,可能需要使用到BootstrapServiceRegistry中的服务.
----------------------SessionFactoryServiceRegistry:【是和sessionfactory相关的了, 包括2LC的region factory, event listener等.
于SessionFactory相关联(一对一的关系), 这里面的Services在初始化的时候需要访问SessionFactory.
这里面的层级关系, 对于 service registry的client来说是完全透明的, 你可以直接调用getService 去获取你需要的service, 而不用去关心你在哪个层级上, 如同 classloader.

 四、Hibernate中获取的Service包括什么?

Service 就是一个功能,它由一个接口(Service Role)和一个实现类组成.
Service 而这次在新版本中,是通过把这些服务的提供者(类),给抽取成一个个的Service,从而可以用统一的方式进行访问/加载/初始化等.
下图列出了所有的Hibernate中内置的Services, 详细介绍请参考:
原文见:

转载地址:http://bexei.baihongyu.com/

你可能感兴趣的文章
Python笔记:NumPy 中的集合运算举例: 查找共同元素,差异元素和共有元素
查看>>
Python笔记:访问或修改 Pandas Series 中的元素以及相关运算
查看>>
Python笔记:Pandas DataFrames 的使用
查看>>
Python笔记:在Pandas中处理NaN值
查看>>
Python笔记:初识Matplotlib和Seaborn
查看>>
Typescript 中的接口的实现
查看>>
Typescript中的泛型的使用
查看>>
JavaScript中使用offset时遇到的bug
查看>>
java基础入门(一)
查看>>
Java基础入门(二)
查看>>
Java基础入门(三)
查看>>
Java基础入门(四)
查看>>
Java基础入门(十)
查看>>
Java基础入门(完结篇)
查看>>
Java进阶之面向对象(一)——继承
查看>>
Java进阶之自定义ArrayList&斗地主发牌案例
查看>>
JavaWeb之filter&listener&文件上传
查看>>
JavaWeb之Ajax&json
查看>>
BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用
查看>>
转载:在 Windows 10 下遇到移动硬盘不自动分配盘符的问题
查看>>