生手上路之Hibernate(二):基本映射以及一些原则与主键生成策略

新手上路之Hibernate(二):基本映射以及一些原则与主键生成策略

一、什么是映射

在上一篇文章中 新手上路之Hibernate:第一个Hibernate例子,通过一个例子了解了什么是Hibernate。而其中最重要的就是通过User.hbm.xml来配置映射。这里所说的映射就是对象关系映射:将对象数据保存到数据库中,同时可以将数据库数据读入对象中,开发人员只对对象进行操作就可以完成对数据库数据的操作。


二、什么是基本映射

知道了什么是映射,那么我们先来看一下最基本的映射关系——基本映射,即根据表结构创建相应实体类


例如:还是以Mysql数据库为例,进行说明。有如下一张表:

生手上路之Hibernate(二):基本映射以及一些原则与主键生成策略

建立相应的实体类:User

public class User {
	private String id;
	private String username;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String userName) {
		this.username = userName;
	}
}

对于Hibernate来说,最重要的就是配置文件,即还需要一个User.hbm.xml文件

<hibernate-mapping>
	<class name="com.example.hibernate.User" table="t_user">
		<id name="id">
			<generator class="uuid"/>
		</id>
		<property name="username"/>
		
	</class>
</hibernate-mapping>

其他部分的代码参照上一篇文章即可。


三、建立User实体类的一些原则

       1、实现无参的默认的构造函数

       2、提供一个标识

       3、建议不要使用fianl修饰实体类

       4、建议为实体类生成setter和getter方法

对于第3条建议,如果使用了fianl关键字,那么延迟加载(load)将会无效。具体含义将会在下一篇文章中给出实例。


四、HIbernate主键生成策略

在上面User.hbm.xml配置文件中有一个标签:<generator>。它表示的是主键生成策略。主键生成策略必须配置,用来为该持久化类的实例生成唯一的标识。它有如下几种策略

    uuid: 用一个128-bit的UUID算法生成字符串类型的标识符,这在一个网络中是唯一的(使用了IP地址),UUID被编码为一个32位16进制数字的字符串,它的生成是由Hibernate生成,一般不会重复UUID包含:IP地址,JVM的启动时间,系统时间和一个计算器值。

    identity:MySql数据库中自增长

    Sequence:Oracle数据库自增长

    native:根据底层数据库能力选择identity、sequence中的一个。

    assigned:手动分配主键.<generator>没有指定时的默认生成策略

    foreign:使用另外一个相关联的对象的标示符。通常和<one-to-one>配合使用

五、总结

概括一下Hibernate的基本映射就是:
实体类——对应了——数据库中表、实体类中的属性——对应了——表中字段。



10楼lbq613613昨天 20:44
貌似一种映射关系。
9楼xqf309昨天 20:43
从文章里读出来,映射是数据库字段和实体属性之间的对应
8楼mazhaojuan昨天 11:12
这理论用在教务系统,教务是不是会变得更强大了?
7楼wwwwenhuan昨天 09:43
基本映射其实就是实体映射,是和关联映射相对的
6楼lidaasky前天 21:27
受益匪浅
5楼lfmilaoshi前天 19:36
理论基础,能不能在实践中运用,想一想,你的教务系统。
4楼tang_huan_11前天 11:13
楼主,你的总结写得真够精辟!
3楼zs15932616453前天 08:03
楼主写的很详细,值得收藏!
2楼Jesse6213天前 21:15
主键生成的策略很重要,挑选合适的。
1楼a1314517love3天前 11:44
这种映射可以实现通过对象来操作数据库,OO思想的再次体现