hibernateO/R映射之基础

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映射就建立了,其实问题的关键不在操作本身,而在于思路是否清晰,只要思路清晰,那么按照别人讲给的配置方法,操作肯定能成功。

可以有一个人陪着你,也可以你一个人,总之那一刻,

hibernateO/R映射之基础

相关文章:

你感兴趣的文章:

标签云: