`
duantonghai
  • 浏览: 20346 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate 启动代码分析

 
阅读更多
从上一篇源代码阅读看,这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源码分析一[启动过程]

    ### 启动代码样例及分析 在启动Hibernate的过程中,首先通过`Configuration`类的构造函数,初始化`Configuration`实例,并加载配置文件`hibernate.cfg.xml`和`hibernate.properties`。然后,通过调用`Configuration...

    hibernate源码分析一_启动过程_

    在深入探讨Hibernate启动过程之前,首先需要了解Hibernate是什么。Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发人员提供了一种在Java应用程序中操作数据库的方式,使得数据库操作可以更加面向对象化...

    精通Hibernate源代码jar包1

    通过深入研究这些关键组件的源代码,开发者可以了解到Hibernate是如何进行对象-关系映射、查询解析、事务处理、缓存管理等一系列操作的。此外,对于出现的问题,源码分析有助于找出问题的根源,从而更有效地解决问题...

    Hibernate3 源代码

    下面将对 Hibernate3 的源代码进行深入解析,探讨其中的关键组件和工作原理。 1. **实体管理(Entity Management)** - **SessionFactory**: 这是 Hibernate 的核心,负责创建 Session 对象。SessionFactory 是...

    深入浅出hibernate源代码

    本教程通过对Hibernate源代码的解析,旨在提升读者对框架原理的理解,从而更好地运用和优化项目中的数据访问。 在学习Hibernate源代码的过程中,我们需要关注以下几个关键知识点: 1. **持久化机制**:Hibernate的...

    hibernate源代码

    通过深入学习和分析这些源代码,开发者可以了解Hibernate是如何将Java对象转换为SQL语句的,以及如何优化这些操作。这有助于提升开发效率,解决性能问题,并理解ORM框架的设计思想。同时,对于希望成为ORM框架开发者...

    hibernate入门源代码

    ### 示例代码分析 在这个"chapter07"目录下,可能包含了一个简单的Hibernate应用示例,涉及了上述步骤。具体代码可能会有以下部分: - `hibernate.cfg.xml`: 配置文件,定义数据库连接信息。 - `Student.java`: 一...

    Spring + Hibernate DAO 代码上传

    通过分析这个上传的代码,开发者可以学习如何配置Spring和Hibernate环境,创建DAO,使用SessionFactory和Session,以及如何在Spring中管理事务。这对于理解和实践Java Web开发中的数据访问层是非常有价值的。

    spring+hibernate学习笔记和项目源代码

    本资源包“spring+hibernate学习笔记和项目源代码”提供了深入理解和实践这两个框架的机会,同时也包含了Struts的集成,形成经典的SSH(Spring、Struts、Hibernate)架构。以下是关于这些主题的详细知识解析: 1. *...

    孙卫琴hibernate source code2

    SessionFactory是Hibernate的核心,它是线程安全的,负责管理持久化类的所有元数据,并且在应用启动时一次性创建。SessionFactoryBuilder则负责构建SessionFactory,而Configuration则用于配置Hibernate,读取...

    hibernate 最新源代码

    通过深入分析这些源代码,你可以更好地理解Hibernate的工作流程,掌握ORM的最佳实践,甚至为框架贡献自己的代码,提升其功能或优化性能。这对于Java开发者来说是一项宝贵的资源,能够加深对ORM框架的理解,提升开发...

    hibernate-src.zip源代码包

    3. **org.hibernate.boot** 包:这部分涉及Hibernate的启动过程和元数据加载,比如`MetadataSources`和`MetadataBuilder`,它们负责从不同来源(如XML配置文件、注解等)收集元数据。 4. **org.hibernate.type** 包...

    一个很简单的hibernate例子

    本示例将深入解析一个基于Hibernate的简单应用,帮助开发者理解其基本概念和工作流程。 首先,我们需要了解Hibernate的核心概念。Hibernate通过XML配置文件或注解来定义Java类和数据库表之间的映射关系,这样我们就...

    hibernate登录页面测试

    **hibernate登录页面测试** Hibernate 是一个流行的Java ORM(对象关系映射)框架,它允许...通过分析这些文件,初学者可以更好地了解如何将Hibernate应用于实际的登录系统中,从而深化对ORM框架和Web开发的理解。

    Spring源代码解析

    Spring源代码解析(二):IoC容器在Web容器中的启动 Spring源代码解析(三):Spring JDBC Spring源代码解析(四):Spring MVC Spring源代码解析(五):Spring AOP获取Proxy Spring源代码解析(六):Spring声明式事务...

    hibernate组建映射代码

    **hibernate组建映射代码详解** 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本篇将深入解析“hibernate组建映射”这一主题,帮助初学者理解如何在Hibernate中...

    hibernate3.2.5.rar

    《深入剖析Hibernate 3.2.5:源码解析与实战指南》 Hibernate,作为一款广泛应用的Java对象关系映射(ORM)框架,为开发者提供了便捷的数据持久化解决方案。源代码的学习是理解其工作原理、优化应用的关键。本文将...

Global site tag (gtag.js) - Google Analytics