赛迪网 > IT技术 Java > Java-企业应用
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

数据库相关:hibernate O/R映射之基础

发布时间:2007.12.29 04:58     来源:赛迪网    作者:执木

hibernate(以下简称hiber)的第一编学习终于结束了。学习的过程中,总结出来一些经验及

学习的笔记,特拿出来与大家共享之,由于我能力有限,不能对hiber做到精通,所以还请大

家鉴别,如发现有什么错误,还望不吝指教,在此谢谢各位达人的斧正。

学hiber的过程中,我买了本书:《深入浅出hibernate》,夏昕,曹晓刚,唐勇合著的,自

我感觉书写的不错,真正的做到了深入浅出。但不足之处鄙人觉得事例太少,实战不佳。需

要大家自己多想办法来实现一些应用,只有这样才能真正的体会其中之精髓,为己所用。

刚接触hiber的时候,在网上找了篇如何学习hiber的文章,认真品读后,牢记作者说的不能

为了学习hiber而学习,而应该从更高层次的去理解它的内涵。这篇文章咱jr上也有

http://www.javaresearch.org/article/24993.htm,大家在学习的时候可以看看。

hiber的主要任务是实现数据的持久层操作,而何谓持久层?可以理解为:在系统逻辑的层面

上,专注于实现数据持久化的一个相对独立的领域。hiber所要完成的是实现在这个领域中的

数据操作,而这个完成并不是一般的只要实现最终目的就算完成的完成,它所追求的性能消

耗小,耦合度小,数据封装性强等等才是它真正意义上的完成数据的持久层操作。

hiber的基础配置及使用在此不再多讲,如果你准备好了学hiber这些不是你的障碍。下面我

们讨论真正属于障碍的部分。

hiber的o/r映射
o:object,r:relational。放在一起就是对象 关系。而hiher本身应该算是java的面向对象特

性与传统关系型数据之间矛盾的产物。又基于对web及hiber的基础性了解,那么o/r映射无疑

就成了orm框架中最为关键的内容。

在学习or映射之前,我们要先对hiber的基本数据类型有所了解。

实体映射技术作为类与表之间的联系纽带,在orm实现中起着至关重要的作用。对于hiber用

户而言,映射关系更多的体现在配置文件的维护过程中。hiber选用xml作为其映射配置文件

的好处自不用说,只要对xml知识有所了解,大家就可以体会到这一点。

我们在配置o/r映射的时候,首先是
1.类名与表名的映射,
2.接着是主键映射,
3.最后是字段映射。

一个完整o/r映射建立的基础是数据库表的存在,然后由数据库表产生类表映射配置媒

介.hbm.xml文件。最后写出实体类,即由数据库表映射出来的java类。

我这里有一份完整的o/r映射,大家可以看一下:
按照上面的步骤,首先有数据库表:
CREATE TABLE reg (
  Id int(6) unsigned NOT NULL auto_increment,
  username varchar(16) default NULL,
  password varchar(20) default NULL,
  phone int(11) default NULL,
  email varchar(30) default NULL,
  address varchar(50) default NULL,
  sex varchar(4) default NULL,
  PRIMARY KEY  (Id)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
在数据表的基础上建立.hbm.xml文件:
< ?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
< hibernate-mapping>

    < class name="mypack.Customer" table="reg">
        < comment>Users may bid for or sell auction items.< /comment>
       
        < id name="id"
            column="id"
            type="int">
            < generator class="native"/>
        < /id>

        < property name="username"
                not-null="true"
                column="username"
                type="string"/>

        < property name="password"
                  not-null="true"
                  column="password"
                  type="string"
                  />

        < property name="phone"
                  not-null="true"
                  column="phone"
                  type="string"
                  />

        < property name="email"
                  not-null="true"
                  column="email"
                  type="string"
                  />
    
        < property name="address"
                  not-null="true"
                  column="address"
                  type="string"
                  />
                 
         < property name="sex"
                  not-null="true"
                  column="sex"
                  type="string"
                  />         
    < /class>
   
< /hibernate-mapping>

然后再建立实体类:
package mypack;

import java.io.Serializable;

public class Customer implements Serializable{
   
    private int id;
    private String username;
    private String email;
    private String password;
    private String phone;
    private String sex;
    private String address;
   
    public Customer(){}
   
    public int getId(){
        return id;
    }
    public void setId(int id){
        this.id=id;
    }
       
    public String getUsername(){
        return this.username;
    }
    public void setUsername(String username){
        this.username=username;
    }
   
    public String getPassword(){
        return password;
    }
    public void setPassword(String password){
       this.password=password;
    }
   
    public String getPhone(){
       return this.phone;
    }
    public void setPhone(String phone){
       this.phone=phone;
    }
               
    public String getEmail(){
        return email;
    }
    public void setEmail(String email){
        this.email=email;
    }
   
    public String getAddress(){
       return this.address;   
    }
    public void setAddress(String address){
       this.address=address;
    }
   
    public String getSex(){
       return this.sex;   
    }
    public void setSex(String sex){
       this.sex=sex;   
    }       
}

< class name="mypack.Customer" table="reg">

下面对这份映射文件做个分析:
1.类表应射配置:
< class name="mypack.Customer" table="reg">
  name指定了映射类名。
  table指定了所对应的数据库表
2.id映射配置
< id name="id" column="id" type="int">
    < generator class="native"/>
< /id>
name指定当前映射类中的属性:id,它对应了数据库表reg表中的主键字段
column指定了当前映射表reg的唯一标识为id这个字段。
type指定了当前字段的数据类型
generator指定了主键的生成方式,关于hiber中的主键生成机制这里有相关的介绍,大家可

以看看:http://blog.csdn.net/watano_cc/archive/2006/02/28/612286.aspx
3.属性/数据库字段映射配置:
 < property name="address"
       not-null="true"
       column="address"
       type="string"/>
相信这个就不用相细介绍了吧?大家看看就明白了[:)]
                 
最后我们说一下路径问题,
.hbm.xml文件默认放在实体类所产生的class文件所在的包中。这样一个完整的o/r映射就建
立了,其实问题的关键不在操作本身,而在于思路是否清晰,只要思路清晰,那么按照别人
讲给的配置方法,操作肯定能成功。 
      (责任编辑:包春林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Slt和Filter的url匹配及url-pattern详解 (12-28) · J2SE综合:浅谈java程序发布之 jre 篇 (12-28)
· J2SE综合--关于j2se的一些知识和技巧 (12-28) · 简单谈新手修练J2EE武功及学SSH的方法 (12-28)
· Java入门--java基础之api的零碎总结 (12-28) · 多线程设计模式:了解wait/notify机制 (12-28)
· 进阶:Java编写过程中安全问题解决指南 (12-28) · 如何在Jini,RMI和Applet中实现代码签名 (12-28)
· Java语言深入:抽象类对象类和对象包装类 (12-28) · 提高写文件的性能的一个比较简单的方法 (12-28)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 中小企业网站建设存在弊端 手机实名推波助澜
· CIO应如何克服三个关键错误信念 CIO委屈定理
· 五条黄金准则能够让CIO巧妙加薪 CIO焦虑调查
· 网上书店解决方案 深圳边检指挥中心ITSM项目
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统