关于Hibernate创建SessionFactory对象的说明

2024-04-11 22:48

本文主要是介绍关于Hibernate创建SessionFactory对象的说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

  1、通过maven来管理jar包,可以通过下列网址来搜索你想要的获取maven的坐标。

        http://mvnrepository.com/

       如加载hiberante的坐标为

      

	<dependencies><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.2.3.Final</version></dependency></dependencies>

 二、获取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, 详细介绍请参考:

转自:https://blog.csdn.net/u010150082/article/details/9527355

这篇关于关于Hibernate创建SessionFactory对象的说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/895381

相关文章

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组