初探Hibernate3源码--读取配置文件
依照个人推测,要实现ORM框架,关键是如何拼凑sql语句再通过jdbc来进行对数据库的访问,另外将数据库返回的数据记录封装成对应的类也是必不可少的。
那么实现ORM框架的基本思路如下:
1,读取xml配置文件,获取连接数据库的配置信息和映射文件;
2,读取类与表的映射文件,保存映射信息;3待续。。。
众所周知,hibernate是通过Configuration类来读取配置文件的,下面来看一看其过程:
1,首先new一个Configuration(),则构建函数会new一个SettingsFactory();
2,调用Configuration的方法configure(),进行读取hibernate.cfg.xm配置文件,那么是如何保存类与表的对应关系呢?
Configuration类:
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 ); //不断循环,解析每一个映射文件 } } }
protected void add(org.dom4j.Document doc) throws MappingException { HbmBinder.bindRoot( doc, createMappings(), CollectionHelper.EMPTY_MAP );//将所读取信息都保存到Mappings中 }
HbmBinder类:
if ( "class".equals( elementName ) ) //读取映射文件中类标签内容
{ RootClass rootclass = new RootClass(); bindRootClass( element, rootclass, mappings, inheritedMetas ); mappings.addClass( rootclass ); }
public static void bindRootClass(Element node, RootClass rootClass, Mappings mappings, java.util.Map inheritedMetas) throws MappingException { bindClass( node, rootClass, mappings, inheritedMetas ); //读取设置该类名 inheritedMetas = getMetas( node, inheritedMetas, true ); // get meta's from <class> bindRootPersistentClassCommonValues( node, inheritedMetas, mappings, rootClass ); }