O/R映射是ORM框架中最为关键的部分;
- Hibernate基本数据类型,在Hibernate实体属性映射关系定义时,通过这些类型定义,可以完成Java数据类型到数据库特定数据类型的映射关系;
例如:
<property name="age" type="integer"></property>
将integer类型的属性age映射到库表字段age;integer是hibernate基本数据之一,Hibernate中提供了丰富的数据类型,其中包括传统类型的java数据类型(String,Integer)及JDBC数据类型,如:Clob,Blob等;Hibernate还支持用户自定义类型;
在HIbernate中,基本数据类型:
Hibernate基本类型 | JAVA类型 | 标准SQL字段类型 |
Boolean | Boolean,java.lang.boolean | BIT |
Yes_no | Boolean,java.lang.boolean | Char(1)(‘Y’/’N’) |
True_false | Boolean,java.lang.boolean | Char(1)(‘Y’/’N’) |
Byte | Byte,java.lang.byte | TINYINT |
Short | Short,java.lang.short | SMALLINT |
Interger | Int,java.lang.integer | INTEGER |
Long | Long,java.lang.long | BIGINT |
Float | Float,java.lang.float | FLOAT |
Double | Double,java.lang.Double | DOUBLE |
Big_decimal | Java.math.BigDecimal | NUMBERIC |
Character | Java.lang.string | CHAR(1) |
String | Java.lang.string | VARCHAR |
Date | Java.util.Date,java.sql.Date | DATE |
Time | Java.util.Date,java.sql.Time | TIME |
Timestamp | Java.util.Date,java.sql.TimeStamp | TIMESTAMP |
Calender | Java.util.Calendar | TIMESTAMP |
Calender_date | Java.util.Calendar | Date |
Clob | Java.sql.clob | CLOB |
Blob | Java.sql.blob | BLOB |
Binary | Byte[] | VARBINARY,BLOB |
Text | Java.lang.String | CLOB |
Seralizable | Java.io.serializable | VARBINARY,BLOB |
Class | Java.lang.class | VARCHAR |
Local | Java.util.locale | VARCHAR |
Timezone | Java.util.timezone | VARCHAR |
Currency | Java.util.currency | VARCHAR |
Hibernate基本类型概括了日常开发中所需的觉得大多数情况,提供了传统数据库类型和java数据类型之间的链接纽带;
- 实体映射
实体映射技术作为类与表之间的联系纽带,对于使用Hibernate而言,映射关系更多的体现在配置文件的维护过程中;
1.实体映射基础
实体映射的核心内容,即实体类与数据库表之间的映射定义;hibernate中,类映射主要包含3部分内容:
a.表名---类名映射
b.主键映射
c.字段映射
比如我们有TUser这个实体类,数据库里有TUser这个表;就可以通过XML文件对其进行关联,根据习惯,我们将映射文件(XML)的名字和类名保持一致;以.hbm.xml为结尾;如:
TUser.java:
public class TUser implements java.io.Serializable {
private Integer tId;
private String tName;
private Integer age;
...
}
TUser.hbm.xml:
<?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="com.keith.bean"> <!-- 配置文件根节点 --> <!-- 类名/表名映射 --> <class name="TUser" table="TUser"> <!-- id映射 --> <id name="tId"> <generator class="native"/> </id> <!-- 字段映射 --> <property name="tName"></property> <property name="age" type="integer"></property> </class> </hibernate-mapping>
详细的字段属性设置,在hibernate文档中很详细;
Hibernate中还支持一种与实体无关的映射方式:动态模型(Dynamic Model)!(不知道用的多不多暂不学习!)