Java中使用Hibernate系列之映射文件学习(第一节)

时间:2022-04-29
本文章向大家介绍Java中使用Hibernate系列之映射文件学习(第一节),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

我们使用Hibernate时,它需要知道怎样去加载(load)和存储(store)持久化类的对象,这也正是Hibernate映射文件发挥作用的地方;这个需要映射文件告诉Hibernate,应该访问哪个数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。

网络配图

下面是一个映射文件的基本结构:

<?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>
[...]
</hibernate-mapping>

这里注意的是Hibernate的DTD是非常复杂的,代码编辑器会自动完成那些用来映射的XML元素(element)和属性(attribute)的创建,注意Hibernate不会主动从web中加载DTD文件,但它会首先在应用程序的classpath中查找。DTD文件已包括在hibernate3.jar里,同时也在Hibernate发布包的src/目录下。

为了讲解方便,在以后的例子里我们会省略DTD的声明,但在实际的应用程序中,DTD声明是必须完整的。 在hibernate-mapping标签(tag)之间, 含有一个class元素,所有的持久化实体类都需要一个这样的映射,来把类对象映射到SQL数据库里的表。

<hibernate-mapping>
<class name="events.Event" table="EVENTS">
</class>
</hibernate-mapping>

现在Hibernate已经知道怎样把Events类的对象持久化到数据库的EVENTS表里,以及怎样从EVENTS表加载到Events类的对象,每个实例对应着数据库表中的一行;这个重点说明主键(唯一的)属性如何映射到数据库表,这里我们用Hibernate的标识符生成策略来产生主键字段。

网络配图

<hibernate-mapping>
<class name="events.Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>

id元素是标识符属性的声明,name="id" 声明了Java属性的名字 - Hibernate会使用getId()和setId()来访问它,column属性则告诉Hibernate我们使用EVENTS表的哪个字段作为主键;嵌套的generator元素指定了标识符生成策略,在这里我们指定native,它根据已配置的数据库(方言)自动选择最佳的标识符生成策略;Hibernate支持由数据库生成全局唯一性(globally unique)和应用程序指定策略来生成标识符。

接下来我们声明映射文件里面包含需要持久化属性,默认情况下,类里面的属性都被视为非持久化的:

<hibernate-mapping>
<class name="events.Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="native"/>
</id>
<property name="date" type="timestamp" column="EVENT_DATE"/>
<property name="title"/>
</class>
</hibernate-mapping>

和id元素一样,property元素的name属性告诉Hibernate使用哪个getter和setter方法;在此例中,Hibernate会寻找getDate()/setDate(), 以及getTitle()/setTitle()。

网络配图

最后我们应该把这个映射文件保存为Event.hbm.xml,且就在EventJava类的源文件目录下,映射文件可随意地命名,但hbm.xml的后缀已成为Hibernate开发者的约定;应用程序的代码结构如下:

.

+lib

<Hibernate and third-party libraries>

+src

+events

Event.java

Event.hbm.xml

好了,这一节的学习先到这里,后面章节中会继续学习Hibernate。我们学习方式是每一节学习一个知识点(每天花10分钟学习)。