【前言】
hibernate一个重要的功能就是映射,它能够在对象模型和关系模型之间转换,是面向对象编程思想提倡使用的,使用映射程序开发人员只需要关心对象模型中代码的编写。对象和关系数据库之间的映射通常是由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>
<class name="com.bjpowernode.hibernate.User">
<id name="id">
………
</id>
<property name="name"/>
…..
</class>
</hibernate-mapping>
【解释】
1、hibernate-mapping元素:可以包含的子元素
2、class元素
(1)常用属性
(2)可以包含的常见子元素
3、主键 - id
(1)被映射的类必须要有一个id定义
(2)通常使用逻辑主键
逻辑主键:没有意义的唯一标识符
业务主键:有意义的唯一标识符
(3)Hibernate使用generator类来生成主键
- Hibernate自带了很多generator(不同的主键生成策略)
int/long– native
String - uuid
- 我们也可以定义自己的generator
实现IdentifierGenerator接口
一般情况下不需要实现自己的generator
4、普通属性映射 - property <property name=“property_name”/>
(1)可使用的常见属性如下:
name – 对应类的属性名称
type – 指定属性的类型,一般情况下可以不用指定,由hibernate自动匹配(可参考文档中的有关说明)
length – 指定长度
column – 指定属性所对应的数据库字段的名称,如果不指定,就是属性的名称
【基本类映射】
1.实体类---——表,采用<class>标签映射
2.实体类中的普通属性(不包括集合、自定义类和数组)---表字段,采用<property>标签映射
3.注意:
如果实体类的名称或实体类中属性的名称和数据库关键字重复,将会出现问题可以考虑采用table属性和column属性对其进行重新命名
4.实体类的设计原则:
* 实现无参的默认的构造函数* 提供一个标识
* 建议不要使用final修饰实体类
* 建议为实体类生成getter和setter方法
5.User1.hbm.xml文件
<hibernate-mapping package="com.bjpowernode.hibernate">
<class name="User1" table="t_user1">
<id name="id" column="user_id" length="32" access="field">
<generator class="uuid"/>
</id>
<property name="name" length="30" unique="true" not-null="true"/>
<property name="password"/>
<property name="createTime" type="date" column="create_time"/>
<property name="expireTime" type="date" />
</class>
</hibernate-mapping>
6.生成表
【总结】
上文介绍了Hibernate的基本映射,并讨论了映射中经常用到的几个属性,使用上面的属性能实现对数据库最基本的操作,但在关系模型中还有很多叫复杂的关系没有讨论,如:多对一、一对多等,将会在下篇文章讨论对象关系映射。