Hibernate映射的基本操作 Java类型、Hibernate映射类型以及SQL类型之间的对应关系

来源:互联网 发布:积分商城数据分析 编辑:程序博客网 时间:2024/06/08 00:42

Hibernate 映射主要是通过对象关系映射文件实现,对象关系映射文件把数据库中的实体(一般为二维表)映射到面向对象中的实体对象,把数据库中多个表之间的相互关系也反映到映射好的类中。以后,在Hibernate中对数据库的操作就直接转换为对这些实体对象的操作了。

1.   映射文件说明:
正确理解各个配置选项的含义是掌握映射文件的关键。映射文件可以对面向对象中的关联关系、继承关系和组合关系等各种关系进行配置。如:
xmlversion = "1.0" encoding= "utf-8" ?>
DOCTYPEhibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
< hibernate-mapping >
    <class name= "org.qiujy.bean.User" table= "user" >
    
        <id name= "id" column = "id" type= "int" >
             
            <generator class= "native" />
        id>
         
        <property name= "name" column = "name" type= "string" />
        <property name= "age" column = "age" type= "int" />
    class>
hibernate-mapping>
 
2.   Hibernate映射类型:
在对象-关系映射文件中,Hibernate映射类型作为Java类型和SQL类型的桥梁。在映射文件中建议使用Hibernate映射类型。
2.1.       java基本映射类型的Hibernate映射类型:
Java类型、Hibernate映射类型以及SQL类型之间的对应关系:
Java 类型
Hibernate 映射类型
标准 SQL 类型
int或java.lang.Integer
integer或int
INTEGER
long或java.lang.Long
long
BIGINT
short或java.lang.Short
short
SMALLINT
byte或java.lang.Byte
byte
TINYINT
float或java.lang.Float
float
FLOAT
double或java.lang.Double
double
DOUBLE
java.math.BigDecimal
big_decimal
NUMERIC
char或java.lang.Character
character
CHAR(1)
java.lang.String
string
VARCHAR
boolean或java.lang.Boolean
boolean
BIT
boolean或java.lang.Boolean
yes_no
CHAR(1)('Y'或' N')
boolean或java.lang.Boolean
true_false
CHAR(1)('T'或' F')
 
2.2.       java时间和日期类型的Hibernate映射类型:
Java 类型
Hibernate 映射类型
标准 SQL 类型
说明
java.util.Date或java.sql.Date
date
DATE
日期
java.util.Date或java.sql.Time
time
TIME
时间
java.util.Date或java.sql.Timestamp
timestamp
TIMESTAMP
时间戳
java.util.Calendar
calendar
TIMESTAMP
 
java.util.Calendar
calendar_date
DATE
 
 
2.3.       java大对象类型的Hibernate映射类型:
Java类型
Hibernate映射类型
标准SQL 类型
MySQL类型
Oracle类型
byte[]
binary
VARBINARY(或者 BLOB)
BLOB
BLOB
java.lang.String
text
CLOB
TEXT
CLOB
实现java.io.Serializable 接口的任意一个 java
serializable
VARBINARY(或者 BLOB)
BLOB
BLOB
java.sql.Clob
clob
CLOB
TEXT
CLOB
java.sql.Blob
blob
BLOB
BLOB
BLOB
 
3.   映射对象标识符(OID)
Hibernate中使用对象标识符(OID)来惟一标识一个对象。为了应付多变的业务要求,Hibernate制定了多种主键生成器。在hibernate的映射文件中,可以指定主键的生成器,如:
< id name = "id" column= "id" type = "int" >
    <generator class= "native" />
id>
Hibernate提供的几种内置标识符生成器:
标识符生成器
描述
increment
hibernate 自动以递增的方式生成标识符,每次增量为1.适用于代理主键
identity
由底层数据库生成标识符.数据库必须支持自动增长字段类型,不便于不同数据库之间的移植.适用于代理主键
sequence
Hibernate 根据底层数据库序列来生成标识符.前提是条件是底层数据库支持序列(如Oracle).适用于代理主键
hilo
Hibernate 根据high/how算法来生成标识符.适用于代理主键
seqhilo
使用一个高/低位算法来高效的生成long , short 或者 int类型的标识符,给定一个数据库序列(sequence)的名字.适用于代理主键
native :
根据底层数据库对自动生成标识符的支持能力,来选择identity ,sequence 或hilo .适用于代理主键
uuid.hex
Hibernate 采用128位的UUID(Universal Unique Identification)算法来生成标识符.UUID算法能够在网络环境中生成唯一的字符串标识符.但字符串型的主键比整型的主键 占用更多的数据库空间.适用于代理主键
uuid.string
使用 UUID算法来生成标识符.UUID被编码为一个16个字符长的任意ASCII组成的字符串。适用于代理主键
assigned
由Java应用程序负责生成标识符,需在保存数据前完成.适用于自然主键
4.   映射自然主键:
代理主键是指与业务逻辑没有联系的主键,而自然主键指与业务逻辑相关的主键。Hibernate 中推荐使用代理主键,而应该尽量不使用自然主键,因为自然主键与业务逻辑联系紧密,一旦自然主键的需求发生变化,与之相关的程序就要变化。自然主键在遗留的旧系统中仍然大量的存在。
如:某人设计的学生表中没有定义代理主键ID,而是以学号(no)字段作为主键,那么相应的学生类中不必定义属性ID,而是以no属性作为OID。映射文件为:
……
< id name = "no" column= "no" type = "int" >
    
    <generator class= "assigned" />
id>
……
也就是说由程序负责给主键赋值。
5.   映射复合自然主键:
如某人设计的学生表中没有定义代理主键ID,而是以姓(firstname)字段和名(lastname)字段作为复合主键,那么相应的学生类中不必定义属性ID。而是以firstName属性和lastName作为OID,它的映射代码如下:
……
< span="">id> <>
<="" span="">name= "firstName" column = "firstname" type= "string" >
      < key-property name = "lastName" column= "lastname" type = "string" >
id>
……
注意:此时的student类因为带有复合的OID,这个类必须实现java.io.Serializable接口,用firstName和lastName这两个属性重写equals()和hashcode()方法。

还有一种方式是先定义单独的主键类,然后在Student类中定义该主键类的一个属性。在此不再赘述。

转自:http://blog.csdn.net/zhaoqiliang527/article/details/6535842

原创粉丝点击