和风细雨

世上本无难事,心以为难,斯乃真难。苟不存一难之见于心,则运用之术自出。

Hibernate的映射文件

Hibernate的映射文件

映射文件也称映射文档,用于向Hibernate提供关于将对象持久化到关系数据库中的信息.
持久化对象的映射定义可全部存储在同一个映射文件中,也可将每个对象的映射定义存储在独立的文件中.后一种方法较好,因为将大量持久化类的映射定义存储在一个文件中比较麻烦,建议采用每个类一个文件的方法来组织映射文档.使用多个映射文件还有一个优点:如果将所有映射定义都存储到一个文件中,将难以调试和隔离特定类的映射定义错误.
映射文件的命名规则是,使用持久化类的类名,并使用扩展名hbm.xml.
映射文件需要在hibernate.cfg.xml中注册,最好与领域对象类放在同一目录中,这样修改起来很方便.

领域对象和类

public class User{
  // ID
  private String id;
 
  // 名称
  private String name;
 
  // 密码
  private String password;
 
  // 邮件
  private String email;
 
  // 上次登录时间
  private String lastLoginTime;
 
  // 上次登录ip
  private String lastLoginIp;

  public User(String name,String password,String email){
    this.name=name;
    this.password=password;
    this.email=email;
  }
}

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="org.hibernate.auction">
  <class name="com.sitinspring.domain.User"
    table="USERTABLE_OKB" lazy="false">
    <id name="id" column="ID" >
      <generator class="uuid.hex"/>
    </id>
    <property name="name" column="name" />
    <property name="password" column="pswd" />
    <property name="email" column="email" />
    <property name="lastLoginTime" column="lastLoginTime" />
    <property name="lastLoginIp" column="lastLoginIp" />
  </class></hibernate-mapping>

hibernate.cfg.xml中的映射文件设置

<?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 name="java:comp/env/hibernate/SessionFactory">
    <!-- JNDI数据源设置 -->
    <property name="connection.datasource">
      java:comp/env/jdbc/myoracle
    </property>

    <!-- SQL方言,org.hibernate.dialect.OracleDialect适合所有Oracle数据库 -->
    <property name="dialect">
      org.hibernate.dialect.OracleDialect
    </property>

    <!-- 显示SQL语句 -->
    <property name="show_sql">true</property>
   
    <!-- SQL语句整形 -->
    <property name="format_sql">true</property>
   
    <!-- 启动时创建表.这个选项在第一次启动程序时放开,以后切记关闭 -->
        <!-- <property name="hbm2ddl.auto">create</property>  -->
           
    <!-- 持久化类的映射文件 -->
    <mapping resource="com/sitinspring/domain/User.hbm.xml" />
    <mapping resource="com/sitinspring/domain/Privilege.hbm.xml" />
    <mapping resource="com/sitinspring/domain/Article.hbm.xml" />
    <mapping resource="com/sitinspring/domain/Record.hbm.xml" />
  </session-factory>
</hibernate-configuration>

映射文件物理位置示例

映射文件的基本结构

映射定义以hibernate-mapping元素开始, package属性设置映射中非限定类名的默认包.设置这个属性后,对于映射文件中列出的其它持久化类,只需给出类名即可.要引用指定包外的持久化类,必须在映射文件中提供全限定类名.
在hibernate-mapping标签之后是class标签.class标签开始指定持久化类的映射定义.table属性指定用于存储对象状态的关系表.class元素有很多属性,下面将逐个介绍.

ID

Id元素描述了持久化类的主码以及他们的值如何生成.每个持久化类必须有一个ID元素,它声明了关系表的主码.如右:
Name属性指定了持久化类中用于保存主码值的属性,该元素表明,User类中有一个名为id的属性.如果主码字段与对象属性不同,则可以使用column属性.

<id name="id" column="ID" >
        <generator class="uuid.hex"/>
</id>


生成器

生成器创建持久化类的主码值.Hibernate提供了多个生成器实现,它们采用了不同的方法来创建主码值.有的是自增长式的,有点创建十六进制字符串, 还可以让外界生成并指定对象ID,另外还有一种Select生成器你那个从数据库触发器trigger检索值来获得主码值.
右边使用了用一个128-bit的UUID算法生成字符串类型的标识符, 这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串 .这对字段类型是字符串的id字段特别有效.UUID作为ID字段主键是非常合适的,比自动生成的long类型id方式要好。

UUID示例
<id name="id" column="ID" >
        <generator class="uuid.hex"/>
</id>

 

自动增长的id
<id name="id" column="ID" type="long">
          <generator class="native"/>
</id>

属性

在映射定义中,property元素与持久化对象的一个属性对应,name表示对象的属性名,column表示对应表中的列(字段),type属性指定了属性的对象类型,如果type被忽略的话,Hibernate将使用运行阶段反射机制来判断类型.

<property name="name" column="name" />
<property name="password" column="pswd" />
<property name="email" column="email" />
<property name="lastLoginTime" column="lastLoginTime" />
<property name="lastLoginIp" column="lastLoginIp" />

posted on 2008-04-30 16:43 和风细雨 阅读(6373) 评论(1)  编辑  收藏 所属分类: Hibernate

评论

# re: Hibernate的映射文件 2009-09-14 13:15 asfas

sdfaf  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: