- 浏览: 377437 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
通常我们使用Hibernate的时候 ,首先要通过以下的代码去创建一个Session.
这里先从我们创建sessionfactory的代码入手, 一级级往里看。
Configuration con=new Configuration().configure();
Configuration位于包org.hibernate.cfg下。该类是读取hibernate.cfg.xml文件的入口。
进入该类, 我们看到 1965行,
也就是说,在没有放入参数的情况下, hibernate默认会找到名字为hibernate.cfg.xml文件来进行解析。
继续往下看, 找到带参数的configure()。
不看LOG, 这里有两个方法被执行。
1. InputStream stream = getConfigurationInputStream(resource);
2003行:
继续看ConfigHelper.getResourceAsStream(resource);
ConfigHelper位于org.hibernate.internal.util。
这里也就获取了该xml文件的stream。支线1到此结束。
2. doConfigure( stream, resource );
Configuration的2064行
这里看一下doConfugration(Document doc)的代码: (2112行)
}
终于看到我们熟悉的东西了。。T_T
在此, Element sfNode得到了xml文件里面的<session-factory>节点内容, 并在之后的方法被加入对象 --addProperties(sfNode);
properties是Configuration类的内部对象。
于是session-factory节点就这么被加进去了。
这个properties是个很重要的变量, 在后面的ServiceRegistry创建的时候就会被用到。
--
可以看到这里的返回参数几乎都是Configuration, 弄来弄去, 最后都是在修改这个Configuration类的实例对象。
还是最初那行代码
Configuration con=new Configuration().configure();
说白了, 这里的configure()就是调用了一大堆内部外部方法, 将new出来的Configuration实例进行了加工, 然后返回。。
今天先到这儿, 明天继续研究, 争取早点把这个图画出来, 写的太乱了实在是。
Configuration con=new Configuration().configure(); ServiceRegistry sr=new ServiceRegistryBuilder().applySettings(con.getProperties()).buildServiceRegistry(); SessionFactory factory=con.buildSessionFactory(sr); Session session=factory.openSession(); Transaction ts=session.beginTransaction();
这里先从我们创建sessionfactory的代码入手, 一级级往里看。
Configuration con=new Configuration().configure();
Configuration位于包org.hibernate.cfg下。该类是读取hibernate.cfg.xml文件的入口。
进入该类, 我们看到 1965行,
public Configuration configure() throws HibernateException { configure( "/hibernate.cfg.xml" ); return this; }
也就是说,在没有放入参数的情况下, hibernate默认会找到名字为hibernate.cfg.xml文件来进行解析。
继续往下看, 找到带参数的configure()。
public Configuration configure(String resource) throws HibernateException { LOG.configuringFromResource( resource ); InputStream stream = getConfigurationInputStream( resource ); return doConfigure( stream, resource ); }
不看LOG, 这里有两个方法被执行。
1. InputStream stream = getConfigurationInputStream(resource);
2003行:
protected InputStream getConfigurationInputStream(String resource) throws HibernateException { LOG.configurationResource( resource ); return ConfigHelper.getResourceAsStream( resource ); }
继续看ConfigHelper.getResourceAsStream(resource);
ConfigHelper位于org.hibernate.internal.util。
public static InputStream getResourceAsStream(String resource) { String stripped = resource.startsWith("/") ? resource.substring(1) : resource; InputStream stream = null; ClassLoader classLoader = ClassLoaderHelper.getContextClassLoader(); if (classLoader!=null) { stream = classLoader.getResourceAsStream( stripped ); } if ( stream == null ) { stream = Environment.class.getResourceAsStream( resource ); } if ( stream == null ) { stream = Environment.class.getClassLoader().getResourceAsStream( stripped ); } if ( stream == null ) { throw new HibernateException( resource + " not found" ); } return stream; }
这里也就获取了该xml文件的stream。支线1到此结束。
2. doConfigure( stream, resource );
Configuration的2064行
protected Configuration doConfiguration(InputStream stream, String resourcesName) throws HibernateException { try{ Document document=xmlHelper.createSAXReader(errorLogger, entityResolver).read(new InputStream(stream)); /*关于这个xmlHelper是在哪里被创建的, 我花了点时间才看出来原来是构造函数里面被创建的。 Configuration有两个构造函数字:protected Configuration(SettingsFactory settingsFactory) { this.settingsFactory = settingsFactory; reset(); } public Configuration() { this( new SettingsFactory() ); } 第二个会在创建Configuration对象的时候调用第一个构造函数, 而第一个函数里面的reset()会创建所有内部的属性对象。 也就是每次创建Configuration,这些都会重置, 所以叫reset。这里学习了。 */ doConfigure(document); finally{ stream.close(); } return this; } } }
这里看一下doConfugration(Document doc)的代码: (2112行)
protected Configuration doConfigure(Document doc) throws HibernateException { Element sfNode = doc.getRootElement().element("session-factory"); String name=sfNode.attributeValue("name"); if(name!=null){ properties.setProperty(Environment.SESSION_FACTORY_NAME, name); } addProperties(sfNode); parseSessionFactory(sfNode, name); Element secNode=doc.getRootElement().element("security"); if(secNode!=null){ parseSecurity(secNode); } return this; }
}
终于看到我们熟悉的东西了。。T_T
在此, Element sfNode得到了xml文件里面的<session-factory>节点内容, 并在之后的方法被加入对象 --addProperties(sfNode);
public Configuration addProperties(Properties extraProperties) { this.properties.putAll( extraProperties ); return this; }
properties是Configuration类的内部对象。
于是session-factory节点就这么被加进去了。
这个properties是个很重要的变量, 在后面的ServiceRegistry创建的时候就会被用到。
--
可以看到这里的返回参数几乎都是Configuration, 弄来弄去, 最后都是在修改这个Configuration类的实例对象。
还是最初那行代码
Configuration con=new Configuration().configure();
说白了, 这里的configure()就是调用了一大堆内部外部方法, 将new出来的Configuration实例进行了加工, 然后返回。。
今天先到这儿, 明天继续研究, 争取早点把这个图画出来, 写的太乱了实在是。
发表评论
-
Connection is read-only. Queries leading to data modification are not allowed。
2014-04-06 21:52 3735<tx:advice id="txAdvic ... -
org.hibernate.HibernateException: No Session found for current thread
2014-04-06 12:37 0今天在maven中整合spring和hibernate,并使用 ... -
select new Topic from ' Mysql 生成SQL语句错误
2014-03-30 22:51 1660Caused by: com.mysql.jdbc.exce ... -
Unable to locate appropriate constructor on class
2014-02-20 00:11 1465org.hibernate.hql.internal.ast. ... -
Hibernate的load和get实际应用区分简单实例
2013-12-18 11:58 876今天在看孔浩的CMS视频时候看到的。 在57 -文章管理06 ... -
自定义OpenSessionInViewer过滤器
2013-12-11 12:12 1058摘自孔浩视频 spring部分-17_spring_SSH整合 ... -
数据库事务 (三)虚读(Phantom Read)
2013-12-01 13:21 0关于各种读 虚读 phantom read: 转自维基 ... -
Hibernate悲观锁
2013-11-30 17:30 0为了防止两个线程同时修改一个数据,造成更新数据丢失,我们可以使 ... -
Hibernate查询HQL实例
2013-11-29 15:56 1295三个实体类对象: public class Team { ... -
QBC与HQL检索
2013-11-28 17:39 0QBC(Query By Criteria) API提供了检索 ... -
Hibernate继承映射
2013-11-28 12:36 652继承映射分为三种情况 1.每个子类一张表 比如说有一个Pers ... -
Hibernate通过Composite-element配置外联表实例 (码)
2013-11-28 11:07 1022摘自圣思园Hibenrate 26. 组件映射深度解析 -37 ... -
Hibernate配置复合主键 composite primary key (二)
2013-11-27 16:41 1450摘自圣思园Hibernate 26.组件映射深度解析 上一篇 ... -
Hibernate配置复合主键 composite primary key (一)
2013-11-27 14:15 2456这篇是关于如何配置Hibernate实现复合主键的映射功能。 ... -
Hibernate通过Comparator接口自定义排序规则
2013-11-25 20:42 2525摘自圣思园 Hibernate25.自定义内存排序器详解及符合 ... -
Hibernate配置Set和List
2013-11-25 10:44 1882========================Set==== ... -
Hibernate的Map配置
2013-11-23 16:21 1300摘自圣思园022.Hibernate映 ... -
Hibernate多对多配置
2013-11-21 22:39 884场景: Student和Course,每一个Student有多 ... -
Hibernate延迟加载案例 (多: 一: 一,附代码)
2013-11-21 17:41 594摘自圣思园Hibernate20.一 ... -
Hibernate一对一配置
2013-11-20 21:49 1049摘自圣思园 19.Hibernate的对象检索策略深度解析.a ...
相关推荐
- `Configuration`类:负责读取和解析hibernate.cfg.xml配置文件,生成SessionFactory实例。 - `SessionFactoryImpl`:实际的SessionFactory实现,包含Session的创建逻辑和缓存管理。 - `SessionImpl`:Session的...
- **Configuration**:负责配置Hibernate,加载hibernate.cfg.xml文件,建立SessionFactory。 - **SessionFactory**:是线程安全的,用于创建Session实例,它是整个Hibernate的核心,管理实体类和数据库表的映射...
标题中的“Jdom生成hibernate.cfg.xml和读取其中内容”涉及到两个主要知识点:一是JDOM库在Java中解析和生成XML文档的应用,二是利用JDOM操作Hibernate配置文件`hibernate.cfg.xml`。 首先,JDOM是Java Document ...
本文将深入探讨如何使用DOM4J库来生成和读取`hibernate.cfg.xml`,这是一个强大的Java XML处理库。 首先,让我们了解DOM4J的基本概念。DOM4J是一个开源的Java库,它提供了一套灵活的API来处理XML文档,包括读取、...
- 配置Hibernate:创建hibernate.cfg.xml文件,定义数据库连接、方言、缓存策略等。 - 映射对象:通过XML映射文件或注解将Java类映射到数据库表。 - 创建SessionFactory:通过Configuration实例化SessionFactory...
在Hibernate中,dom4j主要用于读取和解析Hibernate的配置文件,如`hibernate.cfg.xml`,从而动态构建SessionFactory,极大地简化了配置过程。 三、c3p0在Hibernate中的配置与使用 要将c3p0作为Hibernate的连接池,...
配置 Hibernate,首先需要在配置文件(通常是 `hibernate.cfg.xml`)中指定数据库连接信息,然后创建 SessionFactory,通过 Session 进行数据操作。在实体类上使用注解进行映射,使用 HQL 或 JPQL 进行查询。 5. *...
2. **配置文件(hibernate.cfg.xml)**:在项目中,我们需要配置一个`hibernate.cfg.xml`文件,用于设置数据库连接信息、方言、缓存策略等,这是启动Hibernate的第一步。 3. **实体类(Entity)**:实体类代表...
1. Configuration:配置对象用于读取hibernate.cfg.xml配置文件,初始化SessionFactory。 2. SessionFactory:是线程安全的,负责创建Session实例,它是数据库会话工厂。 3. Session:代表一次数据库会话,负责执行...
4. **配置Hibernate**:使用Hibernate,首先需要创建一个配置文件(通常是hibernate.cfg.xml),在这个文件中定义数据库连接信息、实体类的映射文件位置、事务管理器等。此外,每个需要持久化的Java类也需要相应的...
在Hibernate中,dom4j被用来解析Hibernate的配置文件,如.hibernate.cfg.xml,以及映射文件,如.hbm.xml,以获取元数据信息。 `hibernate-jpa-2.0-api-1.0.1.Final.jar`包含Java Persistence API(JPA)的规范,这...
2. **配置Hibernate**:创建`hibernate.cfg.xml`配置文件,指定数据库连接参数、方言、缓存等。 3. **定义实体**:使用Java类表示数据库表,并用注解或XML描述映射关系。 4. **创建SessionFactory**:基于配置文件...
1. Configuration:配置对象,负责读取Hibernate配置文件(hibernate.cfg.xml),设置数据库连接参数,加载实体类映射文件(hbm.xml)等。 2. SessionFactory:会话工厂,是线程安全的,用于创建Session实例,它是...
2. **配置文件(hibernate.cfg.xml)**: - Hibernate配置文件包含了数据库连接信息,如JDBC驱动、URL、用户名和密码,以及方言(Dialect)等,用于初始化SessionFactory。 3. **实体类(Entities)**: - 实体类...
- **hibernate.cfg.xml**:这是Hibernate的核心配置文件,用于定义数据源、实体扫描路径、缓存策略等关键参数。 - **实体类注解**:使用@Entity、@Table等注解,定义Java类与数据库表的映射关系;@Id、@...
- Configuration:配置对象,负责读取hibernate.cfg.xml配置文件,初始化SessionFactory。 - SessionFactory:会话工厂,是线程安全的,用于创建Session对象。它是整个Hibernate的核心,缓存了所有实体类的元数据...
3. Configuration:配置文件(hibernate.cfg.xml)定义了数据库连接信息、实体类映射等,是Hibernate初始化的重要部分。 4. Mapping文件:每个Java实体类对应一个.hbm.xml文件,描述了类与表之间的映射关系,包括...
在实际开发中,我们需要结合"hibernate-distribution-3.5.6-Final"中的配置文件(如hibernate.cfg.xml)来设置数据库连接信息,并在实体类中定义与数据库表对应的字段。通过SessionFactory的实例,我们可以创建...
1. 加载配置:使用Configuration读取hibernate.cfg.xml配置信息,构建SessionFactory。 2. 创建Session:SessionFactory创建Session实例,用于数据库交互。 3. 开启事务:在Session中开始一个数据库事务。 4. CRUD...
1. 映射机制:Hibernate通过XML文件(如hibernate.cfg.xml)定义对象和表之间的映射关系,实现对象与数据库的无缝转换。 2. Session管理:Session是Hibernate的主要工作接口,负责对象的持久化操作,包括保存、更新...