Configuration cfg=new Configuration();
cfg.addClass(User.class);
cfg.configure();
SchemaExport export=new SchemaExport(cfg);
export.create(true, true);
(1)实例化一个Configuration对象:
拥有一个SettingsFactory引用,和初始化hibernate.properties文件的信息.
(2)cfg.addClass(User.class):
类对应的配置文件hbm.xml的属性和对应的资源的捆绑。
(3)cfg.configure();
解释hibernate.cfg.xml文件
(4)SchemaExport export=new SchemaExport(cfg);
export.create(true, true);
将表结构导入数据库的工具。
Configuration类 之 1_Configuration对象
用过Hibernate的朋友都知道下面代码的意思,不知道的话,看这篇文章也没意思了!
启动代码:
Configuration cfg=new Configuration();
cfg.addClass(User.class);
cfg.configure();
SchemaExport export=new SchemaExport(cfg);
export.create(true, true);
(1)实例化一个Configuration对象
Configuration cfg=new Configuration();
--->
public Configuration() {
this( new SettingsFactory() );
}
--->
this( new SettingsFactory() );相当于调用
protected Configuration(SettingsFactory settingsFactory) {
this.settingsFactory = settingsFactory;
reset();
}
Configuration是需要将配置信息的设置委托给SettingsFactory, SettingsFactory拥有设置配置信息的方法,比如说,public Settings buildSettings(Properties props)
返回的Settings类:存放系统配置信息转换的对象,比如从Properties得到的信息,转换成对象,然后存入Settings对象。
(注意:settings是Settings类对象,props是Properties类对象)
String sessionFactoryName = props.getProperty(Environment.SESSION_FACTORY_NAME);
settings.setSessionFactoryName(sessionFactoryName);
Configuration只做自己应该做的事情就是从properties *.cfg.xml读取系统的参数.
---> protected void reset() {
classes = new HashMap();
imports = new HashMap();
collections = new HashMap();
tables = new TreeMap();
namedQueries = new HashMap();
namedSqlQueries = new HashMap();
sqlResultSetMappings = new HashMap();
xmlHelper = new XMLHelper();
typeDefs = new HashMap();
propertyReferences = new ArrayList();
secondPasses = new ArrayList();
interceptor = EmptyInterceptor.INSTANCE;
properties = Environment.getProperties();
entityResolver = XMLHelper.DEFAULT_DTD_RESOLVER;
eventListeners = new EventListeners();
filterDefinitions = new HashMap();
// extendsQueue = new ArrayList();
extendsQueue = new HashMap();
auxiliaryDatabaseObjects = new ArrayList();
tableNameBinding = new HashMap();
columnNameBindingPerTable = new HashMap();
namingStrategy = DefaultNamingStrategy.INSTANCE;
sqlFunctions = new HashMap();
}
reset():
除了申请一些HashMap对象,ArrayList对象,TreeMap对象,用来存放XML解释后的信息外,还有XMLHelper用于帮助读取XML,
EmptyInterceptor用于扩展自定义拦截器。
EventListeners,一个支持对所有session事件的监听器
DefaultNamingStrategy,默认的命名策略。
还有最重要的
properties = Environment.getProperties();
关键是初始化hibernate.properties文件的信息.
Configuration类 之 2_addClass
cfg.addClass(User.class);( Configuration)
public Configuration addClass(Class persistentClass) throws MappingException {
/** 利用类名称把类的.装换为/然后拼接.hbm.xml这样要求你的配置文件必须和类
* 在一个目录下且名称相同.
*/
String mappingResourceName = persistentClass.getName().replace( '.', '/' ) + ".hbm.xml";
//记录日志
log.info( "Reading mappings from resource: " + mappingResourceName );
return addResource( mappingResourceName, persistentClass.getClassLoader() );
}
---> addClass(Class):转换类名,然后跳转到addResource(String,ClassLoader)
--->addResource(String,ClassLoader):得到类的配置(比如说:User.hbm.xml)的输入流,然后跳转到addInputStream(InputStream)
---> addInputStream(InputStream):用 XML帮助类 解释传入来的流,解释成org.dom4j.Document的形式,然后跳转到add(org.dom4j.Document)
---> add(org.dom4j.Document):把传入的Document对象交给
HbmBinder.bindRoot()处理,
HbmBinder类:hbm.xml的捆绑类。产生hbm.xml对应的属性和对应的资源的捆绑。
Configuration类 之 3--configure()
cfg.configure();
--->直接跳转到configure(“"/hibernate.cfg.xml"”)
--->configure(String):
读取hibernate.cfg.xml的配置信息,得到输入流,
跳转到doConfigure( new FileInputStream( configFile ), configFile.toString() );
---> doConfigure(InputStream, String )
用 XML帮助类 解释传入来的流,解释成org.dom4j.Document的形式,
跳转到doConfigure( doc )
---->doConfigure(org.dom4j.Document doc):
读取Hibernate的信息:(分成session-factory和security两部分来处理)
(1) session-factory:
将session-factory的名字存入Environment.SESSION_FACTORY_NAME,
调用addProperties( sfNode ),parseSessionFactory( sfNode, name ),
将Hibernate.xml.hbm的< session-factory >里的<property>标签和其他标签的内容存入。
(2)security:
将Hibernate.xml.hbm的< security >里标签的内容存入。
Configuration类 之 SchemaExport
SchemaExport export=new SchemaExport(cfg);
export.create(true, true);
SchemaExport类是一个将表结构导入数据库的工具。
public SchemaExport(Configuration cfg) throws HibernateException {
this( cfg, cfg.getProperties() );
}
--->
public SchemaExport(Configuration cfg, Settings settings) throws HibernateException
从配置中得到方言dialect,根据方言得到相应生成表的SQL,和删除表的SQL。
创建一个应用程序到数据库的连接帮助类。
---> export.create(true, true);
直接跳转到 execute( true, true, false, false )
----> execute(boolean, boolean, boolean, boolean )
根据导入的SQL(import.sql)进行处理。
分享到:
相关推荐
在深入探讨Hibernate启动过程之前,首先需要了解Hibernate是什么。Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发人员提供了一种在Java应用程序中操作数据库的方式,使得数据库操作可以更加面向对象化...
在深入探讨Hibernate框架的启动过程之前,我们首先需要了解几个核心的概念和类,它们是Hibernate启动流程的基石。 ### 1. 关键类与接口 #### Environment类 `Environment`类扮演着系统环境变量的关键角色,它定义...
《Hibernate 3.3.2 GA 启动过程深度解析》 Hibernate,作为一款流行的Java持久化框架,其启动过程的复杂性和精妙之处一直是开发者深入理解的重点。本文基于Hibernate 3.3.2 GA版本,对启动流程进行了详细的剖析,...
**二、Hibernate源码启动过程** Hibernate的启动涉及配置文件解析、SessionFactory的创建、实体类扫描等多个环节。首先,通过Configuration类读取hibernate.cfg.xml,解析配置信息,然后建立SessionFactory。...
总结来说,Hibernate源码解析是一个深入理解Java ORM机制、数据库操作以及软件设计模式的过程。通过学习,开发者不仅能提升技能,也能更好地应对实际开发中的挑战。对于想要成为高级Java开发者或架构师的人来说,这...
在描述中提到的博客链接没有具体内容,但从链接格式可以推测,这是一个技术博客,可能详细记录了解决这个问题的过程或者给出了错误分析。通常,当遇到此类错误,开发者会查看日志信息,寻找关于异常的具体描述,比如...
通过以上介绍,我们可以看到 Hibernate 不仅简化了 Java 应用程序与数据库交互的过程,还提供了一系列强大的工具和特性来支持高级数据库操作,如事务管理、缓存策略、批量处理等,大大提高了开发效率。在实际应用中...
2. **配置文件**:Hibernate的配置文件(通常为`hibernate.cfg.xml`)包含了数据库连接信息、映射文件的位置、会话工厂设置等,它是启动Hibernate的前提。 3. **实体类和映射文件**:每个Java实体类都对应一个...
在启动Hibernate时遇到此类错误通常是因为类路径(Classpath)中缺失必要的jar包。具体到这个例子中,问题在于未找到`ehcache.jar`文件。 **解决方案:** 1. **检查类路径:**确保`ehcache.jar`存在于项目的类路径...
本文将深入探讨Hibernate的配置过程,包括基本设置、数据源配置、映射文件配置以及SessionFactory的创建。 **1. Hibernate基本配置** 在使用Hibernate之前,首先需要在项目的`hibernate.cfg.xml`配置文件中进行...
**hibernate+spring复习大纲** ...复习过程中,可以通过选择题、填空题以及案例分析来巩固理论知识,加深对这两个框架的理解。确保能够熟练地将它们应用于实际项目开发中,提升开发效率和代码质量。
“Hibernate配置”章节解释了如何设置Hibernate的配置文件,这是启动和使用Hibernate的关键步骤。正确的配置可以确保框架与特定数据库的兼容性,并优化性能。“第一段代码”部分则鼓励读者动手实践,通过编写简单的...
- **使用Maven**:指导如何通过Maven管理Hibernate Search依赖,简化项目构建过程。 - **配置**:涵盖Hibernate Search的基本配置,包括如何在应用程序中启用搜索功能。 - **索引化**:介绍如何创建、更新或删除索引...
源码分析是深入理解Hibernate工作原理的关键。通过阅读和理解以下关键组件的源码: 1. Configuration:配置加载和解析的过程。 2. SessionFactory:如何根据配置信息创建SessionFactory,以及其内部的缓存机制。 3....
通过分析和学习这个项目,新手可以更好地理解这两个框架的整合过程,以及如何在实际开发中使用它们。文件列表中的"SpringMVC1"可能包含项目的主配置文件、实体类、DAO、Service、Controller等相关代码,详细内容需要...
- 提供了性能分析工具,可以帮助开发者优化Hibernate应用,识别潜在的性能瓶颈,例如N+1查询问题。 8. **版本兼容性**: - Hibernate Tools在Eclipse 3.7 Indigo版本中的适配意味着它支持Hibernate 3.x和4.x系列...
1. SessionFactory:它是所有Session的工厂,负责初始化数据库连接、事务策略、缓存等配置,是线程安全的,一般在应用启动时创建并全局共享。 2. Session:是与数据库交互的主要接口,每个数据库操作都在一个...
总结,通过分析《hibernate-orm-3.3源码》,我们可以深入理解 Hibernate 的工作机制,掌握如何高效地使用 ORM 技术,以及如何根据需求扩展和定制 Hibernate。对于任何想提升数据库操作效率和代码可维护性的 Java ...