关于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

相关文章

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 将字节数组

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A