从上一篇源代码阅读看,这hibernate套的还真是有点深,这次主要看一下他的启动过程
// configures settings from hibernate.cfg.xml
Configuration cfg=new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
先初始化Configuration 对象,这个类里保存运行时的配置信息,
protected Map<String, PersistentClass> classes;
protected Map<String, String> imports;
protected Map<String, Collection> collections;
protected Map<String, Table> tables;
protected List<AuxiliaryDatabaseObject> auxiliaryDatabaseObjects;
protected Map<String, NamedQueryDefinition> namedQueries;
protected Map<String, NamedSQLQueryDefinition> namedSqlQueries;
protected Map<String, ResultSetMappingDefinition> sqlResultSetMappings;
protected Map<String, TypeDef> typeDefs;
protected Map<String, FilterDefinition> filterDefinitions;
protected Map<String, FetchProfile> fetchProfiles;
protected Map tableNameBinding;
protected Map columnNameBindingPerTable;
protected List<SecondPass> secondPasses;
protected List<Mappings.PropertyReference> propertyReferences;
protected Map<ExtendsQueueEntry, ?> extendsQueue;
protected Map<String, SQLFunction> sqlFunctions;
解析获得session factory里面的配置信息
private void parseSessionFactory(Element sfNode, String name) {
Iterator elements = sfNode.elementIterator();
while ( elements.hasNext() ) {
Element subelement = (Element) elements.next();
String subelementName = subelement.getName();
if ( "mapping".equals( subelementName ) ) {
parseMappingElement( subelement, name );
}
else if ( "class-cache".equals( subelementName ) ) {
String className = subelement.attributeValue( "class" );
Attribute regionNode = subelement.attribute( "region" );
final String region = ( regionNode == null ) ? className : regionNode.getValue();
boolean includeLazy = !"non-lazy".equals( subelement.attributeValue( "include" ) );
setCacheConcurrencyStrategy( className, subelement.attributeValue( "usage" ), region, includeLazy );
}
else if ( "collection-cache".equals( subelementName ) ) {
String role = subelement.attributeValue( "collection" );
Attribute regionNode = subelement.attribute( "region" );
final String region = ( regionNode == null ) ? role : regionNode.getValue();
setCollectionCacheConcurrencyStrategy( role, subelement.attributeValue( "usage" ), region );
}
else if ( "listener".equals( subelementName ) ) {
parseListener( subelement );
}
else if ( "event".equals( subelementName ) ) {
parseEvent( subelement );
}
}
}
这里主要看下对mapping 节点的处理
private XmlDocument add(InputSource inputSource, Origin origin) {
XmlDocument metadataXml = MappingReader.INSTANCE.readMappingDocument( entityResolver, inputSource, origin );
add( metadataXml );
return metadataXml;
}
这里的 metadataXml 实际上是一个mapping文件的对象,包含了一个hbm.xml里面的配置信息。建立相应的pojo类是在build session factory的时候,
分享到:
相关推荐
### 启动代码样例及分析 在启动Hibernate的过程中,首先通过`Configuration`类的构造函数,初始化`Configuration`实例,并加载配置文件`hibernate.cfg.xml`和`hibernate.properties`。然后,通过调用`Configuration...
在深入探讨Hibernate启动过程之前,首先需要了解Hibernate是什么。Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发人员提供了一种在Java应用程序中操作数据库的方式,使得数据库操作可以更加面向对象化...
通过深入研究这些关键组件的源代码,开发者可以了解到Hibernate是如何进行对象-关系映射、查询解析、事务处理、缓存管理等一系列操作的。此外,对于出现的问题,源码分析有助于找出问题的根源,从而更有效地解决问题...
下面将对 Hibernate3 的源代码进行深入解析,探讨其中的关键组件和工作原理。 1. **实体管理(Entity Management)** - **SessionFactory**: 这是 Hibernate 的核心,负责创建 Session 对象。SessionFactory 是...
本教程通过对Hibernate源代码的解析,旨在提升读者对框架原理的理解,从而更好地运用和优化项目中的数据访问。 在学习Hibernate源代码的过程中,我们需要关注以下几个关键知识点: 1. **持久化机制**:Hibernate的...
通过深入学习和分析这些源代码,开发者可以了解Hibernate是如何将Java对象转换为SQL语句的,以及如何优化这些操作。这有助于提升开发效率,解决性能问题,并理解ORM框架的设计思想。同时,对于希望成为ORM框架开发者...
### 示例代码分析 在这个"chapter07"目录下,可能包含了一个简单的Hibernate应用示例,涉及了上述步骤。具体代码可能会有以下部分: - `hibernate.cfg.xml`: 配置文件,定义数据库连接信息。 - `Student.java`: 一...
通过分析这个上传的代码,开发者可以学习如何配置Spring和Hibernate环境,创建DAO,使用SessionFactory和Session,以及如何在Spring中管理事务。这对于理解和实践Java Web开发中的数据访问层是非常有价值的。
本资源包“spring+hibernate学习笔记和项目源代码”提供了深入理解和实践这两个框架的机会,同时也包含了Struts的集成,形成经典的SSH(Spring、Struts、Hibernate)架构。以下是关于这些主题的详细知识解析: 1. *...
SessionFactory是Hibernate的核心,它是线程安全的,负责管理持久化类的所有元数据,并且在应用启动时一次性创建。SessionFactoryBuilder则负责构建SessionFactory,而Configuration则用于配置Hibernate,读取...
通过深入分析这些源代码,你可以更好地理解Hibernate的工作流程,掌握ORM的最佳实践,甚至为框架贡献自己的代码,提升其功能或优化性能。这对于Java开发者来说是一项宝贵的资源,能够加深对ORM框架的理解,提升开发...
3. **org.hibernate.boot** 包:这部分涉及Hibernate的启动过程和元数据加载,比如`MetadataSources`和`MetadataBuilder`,它们负责从不同来源(如XML配置文件、注解等)收集元数据。 4. **org.hibernate.type** 包...
本示例将深入解析一个基于Hibernate的简单应用,帮助开发者理解其基本概念和工作流程。 首先,我们需要了解Hibernate的核心概念。Hibernate通过XML配置文件或注解来定义Java类和数据库表之间的映射关系,这样我们就...
**hibernate登录页面测试** Hibernate 是一个流行的Java ORM(对象关系映射)框架,它允许...通过分析这些文件,初学者可以更好地了解如何将Hibernate应用于实际的登录系统中,从而深化对ORM框架和Web开发的理解。
Spring源代码解析(二):IoC容器在Web容器中的启动 Spring源代码解析(三):Spring JDBC Spring源代码解析(四):Spring MVC Spring源代码解析(五):Spring AOP获取Proxy Spring源代码解析(六):Spring声明式事务...
**hibernate组建映射代码详解** 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本篇将深入解析“hibernate组建映射”这一主题,帮助初学者理解如何在Hibernate中...
《深入剖析Hibernate 3.2.5:源码解析与实战指南》 Hibernate,作为一款广泛应用的Java对象关系映射(ORM)框架,为开发者提供了便捷的数据持久化解决方案。源代码的学习是理解其工作原理、优化应用的关键。本文将...