简述Hibernate 3中的XML持久性(Hibernate 3 XML持久化详解与实践)

原创
ithorizon 4周前 (10-20) 阅读数 16 #后端开发

Hibernate 3中的XML持久性详解与实践

Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者方便地将 Java 对象映射到数据库表。Hibernate 3 提供了多种映射对象到数据库的方法,其中之一是通过 XML 文件进行持久化配置。本文将详细介绍 Hibernate 3 中的 XML 持久性,以及怎样实践 XML 持久化。

1. XML持久性的概念

在 Hibernate 中,XML 持久性指的是使用 XML 文件来定义对象关系映射(ORM)的元数据。这些 XML 文件通常被称为映射文件,它们描述了 Java 类与数据库表之间的映射关系。通过 XML 映射文件,Hibernate 能够知道怎样将对象的状态持久化到数据库中,以及怎样从数据库中恢复对象状态。

2. 映射文件的结构

映射文件通常具有以下基本结构:

<?xml version='1.0' encoding='utf-8'?>

<!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.example.MyEntity" table="my_table">

<id name="id" column="id" type="java.lang.Integer">

<generator class="native"/>

</id>

<property name="name" column="name" type="string"/>

<property name="value" column="value" type="float"/>

...

</class>

</hibernate-mapping>

在这个结构中,我们定义了一个名为 <hibernate-mapping> 的根元素,它包含了所有的映射信息。每个 <class> 元素代表一个 Java 类与数据库表之间的映射关系,其中:

  • name 属性指定了 Java 类的完全限定名。
  • table 属性指定了对应的数据库表名。

<class> 元素内部,我们可以定义 <id><property> 元素来映射类的属性和字段到数据库表的列。

3. 主键映射

主键映射是映射文件中非常重要的部分,它定义了怎样处理对象的主键。以下是一个主键映射的例子:

<id name="id" column="id" type="java.lang.Integer">

<generator class="native"/>

</id>

在这个例子中,<id> 元素定义了名为 id 的属性作为主键,它映射到数据库表中的 id 列。类型为 java.lang.Integer<generator> 元素定义了主键的生成策略,这里使用的是 native 策略,它允许 Hibernate 使用数据库的内置主键生成策略。

4. 属性映射

属性映射定义了怎样将类的属性映射到数据库表的列。以下是一个属性映射的例子:

<property name="name" column="name" type="string"/>

<property name="value" column="value" type="float"/>

在这个例子中,<property> 元素定义了两个属性:namevalue。它们分别映射到数据库表的 namevalue 列。类型分别为 stringfloat

5. 相关性映射

相关性映射用于定义实体之间的相关性关系,如一对多、多对一、多对多等。以下是一个多对一相关性映射的例子:

<class name="com.example.Order" table="orders">

...

<many-to-one name="customer" class="com.example.Customer" column="customer_id" lazy="true"/>

</class>

在这个例子中,<many-to-one> 元素定义了 Order 类与 Customer 类之间的多对一相关性。属性 name 指定了相关性属性名,class 指定了相关性的类,column 指定了数据库表中的外键列。

6. XML持久化的实践

下面将通过一个明了的例子来演示怎样使用 Hibernate 3 的 XML 持久性。

6.1 创建映射文件

首先,创建一个名为 User.hbm.xml 的映射文件,用于映射 User 类到数据库表。

<?xml version='1.0' encoding='utf-8'?>

<!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.example.User" table="users">

<id name="id" column="id" type="java.lang.Integer">

<generator class="native"/>

</id>

<property name="username" column="username" type="string"/>

<property name="password" column="password" type="string"/>

</class>

</hibernate-mapping>

6.2 配置 Hibernate

然后,在 Hibernate 配置文件 hibernate.cfg.xml 中添加映射文件的引用。

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="connection.url">jdbc:mysql://localhost:3306/mydb</property>

<property name="connection.username">root</property>

<property name="connection.password">password</property>

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<property name="show_sql">true</property>

<property name="hbm2ddl.auto">update</property>

<mapping resource="com/example/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

6.3 编写实体类

接下来,编写 User 实体类。

package com.example;

import javax.persistence.Entity;

import javax.persistence.Id;

@Entity

public class User {

@Id

private Integer id;

private String username;

private String password;

// Getters and setters

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

}

6.4 编写测试代码

最后,编写测试代码来验证映射是否圆满。

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

public class HibernateTest {

public static void main(String[] args) {

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

Session session = sessionFactory.openSession();

session.beginTransaction();

User user = new User();

user.setUsername("admin");

user.setPassword("password");

session.save(user);

session.getTransaction().commit();

session.close();

}

}

运行上述测试代码,Hibernate 将通过映射文件和配置文件创建数据库表,并将 User 对象持久化到数据库中。

7. 总结

Hibernate 3 的 XML 持久性为开发者提供了一种灵活的行为来定义对象关系映射。通过 XML 映射文件,开发者可以精确地控制对象与数据库表之间的映射关系。虽然 XML 映射文件大概会提高配置的工作量,但它提供了强劲的映射能力和灵活性,促使 Hibernate 在处理繁复的映射关系时更加得心应手。在实际开发中,开发者可以通过项目的需求选择合适的映射行为,以实现高效的对象关系映射。

本文详细介绍了 Hibernate 3 中的 XML 持久性,并通过一个明了的例子演示了怎样使用 XML 映射文件进行持久化配置。通过这个例子,开发者可以更好地懂得 Hibernate XML 持久性的原理和实践。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: 后端开发


热门