Hibernate映射文件——.hbm.xml

映射文件的命名规则——类名.hbm.xml

映射文件告诉 Hibernate 它应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。

一个映射文件的基本结构:

  1. <!DOCTYPE hibernate-mapping PUBLIC
  2.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  3.         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  4. <hibernate-mapping package="org.hibernate.tutorial.domain">
  5.     <class name="Event" table="EVENTS">

  6.     class>
  7. hibernate-mapping

         注意:可以在文本编辑器里打开 DTD — 这是最简单的方式来概览所有的元素和 attribute,并查看它们的缺省值以及注释。

                     Hibernate 不会从 web 加载 DTD 文件,但它会首先在应用程序的 classpath 中查找。DTD 文件已包括在hibernate3.jar

hibernate-mapping 标签(tag)之间, 含有一个 class 元素。所有的持久化实体类都需要一个这样的映射,来把类对象映射到 SQL 数据库里的表。

每个实例对应着数据库表中的一行

唯一标识符属性到数据库表的映射,由于我们不关心怎样处理这个标识符,我们就配置由 Hibernate 的标识符生成策略来产生代理主键字段

该属性也是在hibernate-mapping 标签(tag)之间,代码如下

  1. <hibernate-mapping package="org.hibernate.tutorial.domain">
  2.     <class name="Event" table="EVENTS">
  3.         <id name="id" column="EVENT_ID">
  4.             <generator class="native"/>
  5.         id>
  6.     class>
  7. hibernate-mapping>

           注释:id元素是对 identity 属性的声明。 name="id" 映射属性声明了 JavaBean 属性的名称并告诉 Hibernate 使用 getId() 和 setId()方法来访问这个属性。column 属性告诉 Hibernate events表中的哪个字段持有主键值。

        generator 元素指定标识符的生成策略(也就是标识符值是怎么产生的)。在这个例子里,我们选择native,它提供了取决于数据库方言的可移植性。Hibernate 数据库生成的、全局性唯一的以及应用程序分配的标识符。标识符值的生成也是 Hibernate 的扩展功能之一,你可以插入自己的策略。

 

最后我们在映射文件里面包含需要持久化属性的声明。默认情况下,类里面的属性都被视为非持久化的:

     事例代码如下:

  1. <hibernate-mapping package="org.hibernate.tutorial.domain">
  2.     <class name="Event" table="EVENTS">
  3.         <id name="id" column="EVENT_ID">
  4.             <generator class="native"/>
  5.         id>
  6.         <property name="date" type="timestamp" column="EVENT_DATE"/>
  7.         <property name="title"/>
  8.     class>
  9. hibernate-mapping>

            注释:和 id 元素一样,property元素的name属性告诉 Hibernate 使用哪个 getter 和 setter方法。

           注意:为什么 date 属性的映射含有 column attribute,而 title 却没有?当没有设定 column attribute的时候,Hibernate 缺省地使用 JavaBean 的属性名作为字段名。对于title,这样工作得很好。然而,date 在多数的数据库里,是一个保留关键字,所以我们最好把它映射成一个不同的名字。

       如果在映射文件中没有设置 type 属性的话,Hibernate 会自己试着去确定正确的转换类型和它的映射类型。在某些情况下这个自动检测机制(在 Java 类上使用反射机制)不会产生你所期待或需要的缺省值。date 属性就是个很好的例子,Hibernate 无法知道这个属性(java.util.Date 类型的)应该被映射成:SQLdate,或timestamp,还是time 字段。在此例中,把这个属性映射成timestamp 转换器,这样我们预留了日期和时间的全部信息。

把新的映射加入到Hibernate的配置中:
格式<mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/>

你可能感兴趣的:(SSH,Hibernate学习)