本文向您介绍在单元测试中应用开源对象关系映射Hiberate的配置文件,通过对new Configuration()的操作得到相应的效果。
Hibernate是一个盛行的开源目标联系映射东西,单元测验和继续集成的重要性也得到了广泛的推行和认同,在采用了Hibernate的项目中怎么确保测验的自动化和继续性呢?本文评论了Hibernate装备文件hibernate.properties和hibernate.cfg.xml的进程,以及怎么样将hibernate供给的装备文件的拜访办法灵活运用到单元测验中。
介绍
Hibernate 是一个盛行的开源目标联系映射东西,单元测验和继续集成的重要性也得到了广泛的推行和认同,在采用了Hibernate的项目中怎么确保测验的自动化和继续性呢?本文评论了Hibernate加载其装备文件hibernate.properties和hibernate.cfg.xml的进程,以及怎么样将hibernate供给的装备文件的拜访办法灵活运用到单元测验中。留意:本文以hibernate2.1作为评论的根底,不确保本文的观念适合于其他版别。
1.预备
关于hibernate的初学者来说,***次运用hibernate的经历通常是:
1) 装置装备好Hibernate,咱们后边将%HIBERNATE_HOME%作为对Hibernate装置目录的引证,
2) 开端创立好自己的***个比如,例如hibernate手册里边的类Cat,
3) 装备好hbm映射文件(例如Cat.hbm.xml,本文不评论这个文件内装备项的意义)和数据库(如hsqldb),
4) 在项目的classpath途径下增加一个hibernate.cfg.xml文件,如下(***次运用hibernate最常见的装备内容):
- <?xmlversion="1.0"encoding="utf-8"?>
- <!DOCTYPEhibernate-configuration
- PUBLIC"-//Hibernate/HibernateConfigurationDTD//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <propertyname="connection.url">jdbc:hsqldb:hsql://localhost</property>
- <propertyname="connection.driver_class">org.hsqldb.jdbcDriver</property>
- <propertyname="connection.username">sa</property>
- <propertyname="connection.password"></property>
- <propertyname="dialect">net.sf.hibernate.dialect.HSQLDialect</property>
- <propertyname="hibernate.show_sql">false</property>
- <mappingresource="Cat.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
5) 然后还需要供给一个类来测验一下创立,更新,删去和查询Cat,关于了解JUnit的开发人员,能够创立一个单元测验类来进行测验,如下:
- importjunit.framework.TestCase;
- importnet.sf.hibernate.HibernateException;
- importnet.sf.hibernate.Session;
- importnet.sf.hibernate.Transaction;
- importnet.sf.hibernate.cfg.Configuration;
- publicclassCatTestextendsTestCase{
- privateSessionsession;
- privateTransactiontx;
- protectedvoidsetUp()throwsException{
- Configurationcfg=newConfiguration().configure();////留意这一行,这是本文要点评论研究的当地。
- session=cfg.buildSessionFactory().openSession();
- tx=session.beginTransaction();
- }
- protectedvoidtearDown()throwsException{
- tx.commit();
- session.close();
- }
- publicvoidtestCreate(){
- //请在此办法内增加相关的代码,本文不评论怎么样运用HibernateAPI。
- }
- publicvoidtestUpdate(){
- //请在此办法内增加相关的代码,本文不评论怎么样运用HibernateAPI。
- }
- publicvoidtestDelete(){
- //请在此办法内增加相关的代码,本文不评论怎么样运用HibernateAPI。
- }
- publicvoidtestQuery(){
- //请在此办法内增加相关的代码,本文不评论怎么样运用HibernateAPI。
- }
- }
2、new Configuration()都做了什么?
关于***次运用hibernate的新手来说,下面的这段代码能够说是最常见的运用Configuration办法。
Configuration cfg = new Configuration().configure();
Configuration是hibernate的进口,在新建一个Configuration的实例的时分,hibernate会在classpath里边查找hibernate.properties文件,假如该文件存在,则将该文件的内容加载到一个Properties的实例GLOBAL_PROPERTIES里边,假如不存在,将打印信息
hibernate.properties not found
然后是将避实就虚体系环境变量(System.getProperties())也增加到GLOBAL_PROPERTIES里边( 注1)。假如hibernate.properties文件存在,体系还会验证一下这个文件装备的有效性,关于一些现已不支持的装备参数,体系将打印正告信息。
3、configure()在做什么?
new Configuration()评论至此,下面评论configure()办法。
configure()办法默许会在classpath下面寻觅hibernate.cfg.xml文件,假如没有找到该文件,体系会打印如下信息并抛出HibernateException反常。
hibernate.cfg.xml not found
假如找到该文件,configure()办法会首要拜访< session-factory >,并获取该元素的name特点,假如非空,将用这个装备的值来掩盖hibernate.properties的hibernate.session_factory_name的装备的值,从管中窥豹咱们能够看出,hibernate.cfg.xml里边的装备信息能够掩盖hibernate.properties的装备信息。
接着configure()办法拜访<session-factory>的子元素,首要将运用避实就虚的<property>元素装备的信息( 注2),如前面咱们运用的装备文件
- <propertyname="connection.url">jdbc:hsqldb:hsql://localhost</property>
- <propertyname="connection.driver_class">org.hsqldb.jdbcDriver</property>
- <propertyname="connection.username">sa</property>
- <propertyname="connection.password"></property>
- <propertyname="dialect">net.sf.hibernate.dialect.HSQLDialect</property>
会掩盖hibernate.properties里边对应的装备,hibernate2.1发布包里边自带的hibernate.properties文件(坐落%HIBERNATE_HOME%/etc下面)里边的值,如下:
- hibernate.dialectnet.sf.hibernate.dialect.HSQLDialect
- hibernate.connection.driver_classorg.hsqldb.jdbcDriver
- hibernate.connection.usernamesa
- hibernate.connection.password
- hibernate.connection.urljdbc:hsqldb:hsql://localhost
然后configure()会次序拜访以下几个元素的内容
- <mapping>
- <jcs-class-cache>
- <jcs-collection-cache>
- <collection-cache>
其间<mapping>是必不可少的,有必要经过装备<mapping>,configure()才干拜访到咱们界说的Java目标和联系数据库表的映射文件(hbm.xml),例如:
<mapping resource="Cat.hbm.xml"/>
经过以上的剖析,咱们对Hibernate装备文件hibernate.properties和hibernate.cfg.xml的默许的加载进程就比较清楚了。
【修改引荐】
- 强者Hibernate文档笔记(上)
- 强者Hibernate文档笔记(中)
- 强者Hibernate文档笔记(下)
- Hibernate优化办法解析
- Hibernate的功能优化