Hibernate配置文件详解

 Hibernate的基本配置文件有两种:hibernate.cfg.xml.hbm.xml文件。前者包含了Hibernate与数据库的基本连接信息,在Hibernate工作的初始阶段,这些信息被先后加载到ConfigurationSessionFactory实例;后者包含了Hibernate的基本映射信息,即系统中每一个类与其对应的数据库表之间的关联信息,在Hibernate工作的初始阶段,这些信息通过hibernate.cfg.xmlmapping节点被加载到ConfigurationSessionFactory实例。这两种文件信息包含了Hibernate的所有运行期参数。下面我们用详细的例子来说明这两种文件的基本结构和内容。  
一、hibernate.cfg.xml文件:  
     <!-- 该文件的开头信息,对Hibernate而言,该类文件基本都这么开头:)--> 
     <?xml version='1.0' encoding='UTF-8'?> 
     <!DOCTYPE hibernate-configuration PUBLIC 
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
     <!-- 
正文开始 --> 
     <hibernate-configuration> 
     <!--
下面是数据库的基本连接信息,对一个应用来说,设置一个session-factory节点就够了,除非我们中间使用了多个数据库--> 
     <session-factory> 
     <!--
用户名 --> 
     <property name="connection.username">root</property> 
     <!--url
信息 --> 
     <property name="connection.url">jdbc:mysql://localhost:3306/webases</property> 
     <!--
数据库方言信息--> 
     <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
     <!--
密码 -->  
     <property name="connection.password">274507</property> 
     <!--
数据库驱动信息 --> 
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
     <!--
指定Hibernate映射文件路径 --> 
     <mapping resource="com/Hibernate/test_products.hbm.xml" /> 
     </session-factory> 
     </hibernate-configuration> 
二、.hbm.xml文件: 
     
由于 Hibernate 的关联关系包含了一对一、一对多、多对一和多对多等四种类型,因此,也就有分别与之对应的四种 .hbm.xml 文件。下面我们就以比较常用的双向 一对多 型关联关系为例,介绍一下 .hbm.xml 文件的基本结构和内容。有关 Hibernate 更详细的内容,请参考相关文资料。  
     
该例中有两张数据库表:一张为 表,另一张为 表,所用的数据库为 MySQL 。二者的建表语句如下:  
     CREATE TABLE IF NOT EXISTS Province 
     ( 
        Guid                      INT               NOT NULL AUTO_INCREMENT, 
        Provincename         VARCHAR(16)  NOT NULL, 
        PRIMARY KEY (Guid) 
     )  TYPE=InnoDB;  
     CREATE TABLE IF NOT EXISTS City 
     ( 
        Guid                      INT               NOT NULL AUTO_INCREMENT, 
        Cityname               VARCHAR(32)  NOT NULL, 
        ProvinceID              INT              NOT NULL, 
        PRIMARY KEY (Guid) 
     )  TYPE=InnoDB; 
     ALTER TABLE City ADD CONSTRAINT CityRFProvince FOREIGN KEY (ProvinceID) 
     REFERENCES Province (Guid) ON DELETE CASCADE ON UPDATE RESTRICT; 
     Province
表为主控方, City 表为被控方,两者之间存在双向的一对多的关系。表 City 通过外键 ProvinceID 与表 Province 进行关联:当表 Province 中有记录被删除时,表 City 中相关记录亦被删除;当表 Province 中有记录被保存或者更新时,表 City 中相关记录无任何变化。  
     
Hibernate自带工具Middlegen生成的Province.hbm.xml文件进行修改,内容如下:  
     <!-- 该文件的开头信息,对Hibernate而言,该类文件基本都这么开头:)--> 
     <?xml version="1.0"?> 
     <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 2.0//EN" 
        "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd
     >  
     <!-- 
映射文件开始 -->    
     <hibernate-mapping> 
     <!-- 
下面的class节点定义了Province类和对应数据库表之间的关联关系 --> 
     <class 
        name="com.xxx.hibernate.Province" 
        table="Province" 
     >  
     <!-- 
下面的两个节点定义了Province类中的属性和该类对应数据库表中的字段之间的关联关系,其中Guid为对应数据库表的主键 --> 
     <id 
        name="guid" 
        type="int" 
        column="Guid" 
     > 
     <generator class="native" /> 
     </id> 
     <property 
        name="provincename" 
        type="java.lang.String" 
        column="Provincename" 
        not-null="true" 
        length="16" 
     >   
     </property> 
     <!-- 
下面的set节点定义了Province类和City类之间的一对多型关联关系 --> 
     <set 
        name="cities"<!-- 
集合属性的名称 --> 
        lazy="true"<!-- 
是否允许延迟加载 --> 
        inverse="true"<!-- 
定义这个集合是否为双向关联关系中的方向一端 --> 
        cascade="delete"<!-- 
定义有关操作是否关联到子实体(此处指City类对象) --> 
     > 
     <key> 
        <column name="ProvinceID" /><!-- 
定义集合所对应的数据库表的外键 --> 
     </key> 
     <one-to-many 
        class="com.xxx.hibernate.City"<!-- 
定义集合所属的类--> 
     /> 
     </set>  
     </class> 
     </hibernate-mapping> 
      Hibernate自带工具Middlegen生成的City.hbm.xml文件进行修改,内容如下:  
     <!--
该文件的开头信息,对Hibernate而言,该类文件基本都这么开头:)--> 
     <?xml version="1.0"?> 
     <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 2.0//EN" 
        "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd
     >  
     <!-- 
映射文件开始 -->    
     <hibernate-mapping> 
     <!-- 
下面的class节点定义了City类和对应数据库表之间的关联关系 --> 
     <class 
        name="com.xxx.hibernate.City" 
        table="City" 
     >  
     <!-- 
下面的两个节点定义了City类中的属性和该类对应数据库表中的字段之间的关联关系,其中Guid为对应数据库表的主键--> 
     <id 
        name="guid" 
        type="int" 
        column="Guid" 
     > 
     <generator class="native" /> 
     </id>   
     <property 
        name="cityname" 
        type="java.lang.String" 
        column="Cityname" 
        not-null="true" 
        length="32" 
     >    
     </property> 
     <!-- 
下面的many-to-one节点定义了Province类和City类之间的一对多型关联关系 --> 
     <many-to-one 
        name="province"<!-- 
属性名称 --> 
        class="com.xxx.hibernate.Province"<!-- 
属性所属的类 --> 
        cascade="none"<!--  指定哪些操作会从父对象(此处指City类对象)级联到子对象(此处指Province类对象) --> 
        outer-join="auto"<!-- 
设置父子对象之间是否存在外连接 --> 
        not-null="true"<!-- 
指定该属性是否一定为非空 --> 
     > 
     <column name="ProvinceID" /><!-- 
定义父对象(此处指City类对象)所对应的数据库表的外键 --> 
     </many-to-one> 
     </class>  
     </hibernate-mapping>

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值