`
gutou9
  • 浏览: 142791 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

hibernate3 源码阅读 (一) Configuration

阅读更多

最近简略看了一下hibernate的源代码,比较晕,不过也看出了大概,

我看源代码喜欢模仿着写,这样有助理解,写的比较简陋,估计一段时间也不会再更新了,

先贴这,

 把总结写出来,边看边写吧,先写初始化部分。

 

		Configuration cfg = new Configuration();

		SessionFactory factory = cfg.buildSessionFactory();

		Session s = factory.openSession();

		Transaction tx = s.beginTransaction();

 

上边是hibernate 自带例子里边的调用顺序,

就采用流水账写法,跟着这几句代码,一个方法一个方法的走。

 

Configuration cfg = new Configuration();

	protected Configuration(SettingsFactory settingsFactory) {
		this.settingsFactory = settingsFactory;
		reset();
	}

	public Configuration() {
		this( new SettingsFactory() );
	}

 

显示new Configuration 类, 从上边实现可以看出,要先new 一个 SettingsFactory

 

那就先看SettingsFactory

public class SettingsFactory implements Serializable {

	public static final String DEF_CACHE_REG_FACTORY = NoCachingRegionFactory.class.getName();
	private static final Logger log = LoggerFactory.getLogger(SettingsFactory.class);

	protected SettingsFactory() {
	}
	
	public Settings buildSettings(Properties props) {
		Settings settings = new Settings();
		

 
构造函数为空,那就回头接着看Configuration

reset() 方法,

	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();
	}

 

properties = Environment.getProperties();

 

 看下他的实现

Environment.java

 

	public static Properties getProperties() {
		Properties copy = new Properties();
		copy.putAll(GLOBAL_PROPERTIES);
		return copy;
	}

 

函数返回的,实际就是 GLOBAL_PROPERTIES,

那么他是在哪里被初始化的呢?

原来这个类里边有个静态代码块

	static {

		log.info("Hibernate " + VERSION);

		RENAMED_PROPERTIES.put( "hibernate.cglib.use_reflection_optimizer", USE_REFLECTION_OPTIMIZER );

		ISOLATION_LEVELS.put( new Integer(Connection.TRANSACTION_NONE), "NONE" );
		ISOLATION_LEVELS.put( new Integer(Connection.TRANSACTION_READ_UNCOMMITTED), "READ_UNCOMMITTED" );
		ISOLATION_LEVELS.put( new Integer(Connection.TRANSACTION_READ_COMMITTED), "READ_COMMITTED" );
		ISOLATION_LEVELS.put( new Integer(Connection.TRANSACTION_REPEATABLE_READ), "REPEATABLE_READ" );
		ISOLATION_LEVELS.put( new Integer(Connection.TRANSACTION_SERIALIZABLE), "SERIALIZABLE" );

		GLOBAL_PROPERTIES = new Properties();
		//Set USE_REFLECTION_OPTIMIZER to false to fix HHH-227
		GLOBAL_PROPERTIES.setProperty( USE_REFLECTION_OPTIMIZER, Boolean.FALSE.toString() );

		try {
			InputStream stream = ConfigHelper.getResourceAsStream("/hibernate.properties");
			try {
				GLOBAL_PROPERTIES.load(stream);
				log.info( "loaded properties from resource hibernate.properties: " + PropertiesHelper.maskOut(GLOBAL_PROPERTIES, PASS) );
			}
			catch (Exception e) {
				log.error("problem loading properties from hibernate.properties");
			}
			finally {
				try{
					stream.close();
				}
				catch (IOException ioe){
					log.error("could not close stream on hibernate.properties", ioe);
				}
			}
		}
		catch (HibernateException he) {
			log.info("hibernate.properties not found");
		}

		try {
			GLOBAL_PROPERTIES.putAll( System.getProperties() );
		}
		catch (SecurityException se) {
			log.warn("could not copy system properties, system properties will be ignored");
		}

		verifyProperties(GLOBAL_PROPERTIES);

		ENABLE_BINARY_STREAMS = PropertiesHelper.getBoolean(USE_STREAMS_FOR_BINARY, GLOBAL_PROPERTIES);
		ENABLE_REFLECTION_OPTIMIZER = PropertiesHelper.getBoolean(USE_REFLECTION_OPTIMIZER, GLOBAL_PROPERTIES);

		if (ENABLE_BINARY_STREAMS) {
			log.info("using java.io streams to persist binary types");
		}
		if (ENABLE_REFLECTION_OPTIMIZER) {
			log.info("using bytecode reflection optimizer");
		}
		BYTECODE_PROVIDER_INSTANCE = buildBytecodeProvider( GLOBAL_PROPERTIES );

		boolean getGeneratedKeysSupport;
		try {
			Statement.class.getMethod("getGeneratedKeys", null);
			getGeneratedKeysSupport = true;
		}
		catch (NoSuchMethodException nsme) {
			getGeneratedKeysSupport = false;
		}
		JVM_SUPPORTS_GET_GENERATED_KEYS = getGeneratedKeysSupport;
		if (!JVM_SUPPORTS_GET_GENERATED_KEYS) log.info("JVM does not support Statement.getGeneratedKeys()");

		boolean linkedHashSupport;
		try {
			Class.forName("java.util.LinkedHashSet");
			linkedHashSupport = true;
		}
		catch (ClassNotFoundException cnfe) {
			linkedHashSupport = false;
		}
		JVM_SUPPORTS_LINKED_HASH_COLLECTIONS = linkedHashSupport;
		if (!JVM_SUPPORTS_LINKED_HASH_COLLECTIONS) log.info("JVM does not support LinkedHasMap, LinkedHashSet - ordered maps and sets disabled");

		JVM_HAS_TIMESTAMP_BUG = new Timestamp(123456789).getTime() != 123456789;
		if (JVM_HAS_TIMESTAMP_BUG) log.info("using workaround for JVM bug in java.sql.Timestamp");
		Timestamp t = new Timestamp(0);
		t.setNanos(5 * 1000000);
		JVM_HAS_JDK14_TIMESTAMP = t.getTime() == 5;
		if (JVM_HAS_JDK14_TIMESTAMP) {
			log.info("using JDK 1.4 java.sql.Timestamp handling");
		}
		else {
			log.info("using pre JDK 1.4 java.sql.Timestamp handling");
		}
	}

 

GLOBAL_PROPERTIES 的初始化就在这里,主要是这几句,

 

GLOBAL_PROPERTIES = new Properties();

GLOBAL_PROPERTIES = new Properties();

InputStream stream = ConfigHelper.getResourceAsStream("/hibernate.properties");
			
try {
        GLOBAL_PROPERTIES.load(stream);

 

 ("/hibernate.properties") 就是默认的配置文件了,

至于 static 块里的其他代码,就暂时不看了。

 

到了这里,hibernate的配置文件,就加载到hibernate框架里了。

 


 

  • orm.rar (21.6 KB)
  • 下载次数: 99
分享到:
评论

相关推荐

    hibernate-3.2源代码

    《深入剖析Hibernate 3.2源代码》 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。在Hibernate 3.2版本中,开发者们能够更深入地理解其内部机制,从而提高开发效率...

    hibernate-configuration

    <hibernate-configuration> <!--com/sfhn/cim_dbms/hbm/IEC61968_Assets_AssetBasics_Asset.hbm.xml map-to EAA_Asset -->

    hibernate3.2.5源代码

    源代码中的`Configuration`类负责读取这些配置,构建`SessionFactory`,这是执行所有Hibernate操作的基础。 3. **实体管理** 在3.2.5版本中,`Entity`是核心概念,代表数据库表。`HibernateAnnotations`和XML映射...

    Hibernate源代码分析(一)

    Hibernate 源代码分析 (一):设计属于我的 SessionFactory 和 ConnectionProvider 在这篇文章中,我们将探讨 Hibernate 框架的源代码,了解 SessionFactory 和 ConnectionProvider 的实现机制。首先,我们需要了解 ...

    Hibernate 源代码及重要说明

    1. **EntityScanner**: Hibernate源码中负责扫描项目中所有标注了@Entity的类,构建实体类的元数据。 2. **SessionFactoryBuilder**: 创建SessionFactory的过程,包括配置读取、数据库连接建立、方言选择等。 3. *...

    hibernate入门源代码

    **Hibernate入门源代码详解** Hibernate 是一款开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。这个资源包包含了“chapter07”目录下的源代码,是学习Hibernate基础知识的理想起点。让...

    Hibernate源代码分析

    Hibernate源代码分析 在 Hibernate 框架中,SessionFactory 和 ConnectionProvider 是两个非常重要的组件,了解它们的实现机制对于深入了解 Hibernate 的工作原理具有重要意义。本文将通过分析 Hibernate 的源代码...

    hibernate学习源代码祝你提高

    通过深入研究这个 Hibernate 3.x 的源代码,你可以了解到其内部的工作流程,比如对象状态管理、查询解析、SQL 生成等,这将有助于提升你的编程技巧和解决问题的能力。同时,熟悉 Hibernate 的最佳实践,可以帮助你在...

    Hibernate源码解析(一)

    《Hibernate源码解析(一)》 在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。深入理解Hibernate的源码,不仅可以帮助开发者更好地运用该工具,还能提升对Java编程和...

    Hibernate开发实战讲解(源代码)源码整理

    《Hibernate开发实战讲解》源码解析 在Java领域,Hibernate是一个非常重要的持久化框架,它极大地简化了数据库操作,使得开发者能够专注于业务逻辑而非繁琐的数据交互。本篇将深入探讨Hibernate的核心概念,以及...

    hibernate-3.2 源码

    通过阅读和分析Hibernate 3.2的源码,我们可以深入了解ORM框架的设计理念,学习如何优化数据库操作,以及如何在实际项目中灵活运用Hibernate提供的各种功能。同时,这也有助于我们掌握Java反射、代理、元数据解析等...

    hibernate源代码的zip文件

    《深入剖析Hibernate源码》 Hibernate,作为Java领域中的一款著名持久化框架,极大地简化了数据库操作,使得开发者能够更加专注于业务逻辑而非繁琐的数据交互。本文将基于“hibernate源代码的zip文件”展开,深入...

    hibernate源代码下载

    通过阅读和分析Hibernate的源代码,开发者能够深入理解其内部机制,包括持久化策略、查询语言(HQL)、缓存管理以及事务处理等核心功能。 一、Hibernate ORM框架介绍 Hibernate 提供了一个强大的接口,用于在Java...

    hibernate3.2.4 源代码

    这里我们将围绕“hibernate3.2.4 源代码”这一主题,探讨Hibernate的核心概念、设计模式以及关键组件。 1. **核心概念**: - **对象关系映射(ORM)**: Hibernate是ORM的一种实现,它允许开发者用面向对象的方式...

    hibernate源代码

    在这个“hibernate源代码”压缩包中,包含的是Hibernate框架的核心源码,这为我们深入理解其工作原理、自定义功能或者优化性能提供了可能。 在Hibernate源代码中,有几个关键的模块和类值得我们关注: 1. **...

    hibernate3.6.1源码

    源码中的`org.hibernate.cfg`包包含了配置和映射的相关类,如`Configuration`和`AnnotationBinder`。 2. **Session接口**:`org.hibernate.Session`是与数据库进行交互的主要接口,提供了持久化对象、查询数据、...

    hibernate源码

    在这个`hibernate-release-4.1.4.Final`版本中,包含了完整的Hibernate源码以及所有必要的jar包,使得我们可以深入理解其工作原理并进行定制开发。 首先,让我们探讨一下Hibernate的核心概念。Hibernate的核心是...

    hibernate源码分析一[启动过程]

    标题:hibernate源码分析一[启动过程] 在深入探讨Hibernate框架的启动过程之前,我们首先需要了解几个核心的概念和类,它们是Hibernate启动流程的基石。 ### 1. 关键类与接口 #### Environment类 `Environment`类...

    Hibernate Soruce Code 源代码

    10. 设计模式应用:Hibernate源代码中广泛应用了工厂模式、单例模式、代理模式等经典设计模式,研究源码可以加深对这些模式的理解。 总之,深入研究Hibernate源代码是提升Java开发技能的重要步骤,可以帮助我们更好...

    hibernate 源码直接导入Eclipse

    3. 学习与调试Hibernate源码: - 查阅源码:通过Eclipse的代码导航功能,可以快速定位到具体类和方法,理解其实现逻辑。 - 创建测试用例:为了更好地理解Hibernate的功能,可以创建一些测试用例,模拟数据库操作,...

Global site tag (gtag.js) - Google Analytics