Hibernate 映射文件是一种配置文件,用于定义 Java 类与数据库表之间的映射关系。这种映射文件通常使用 XML 格式编写,虽然现在更常用的是直接在 Java 类上使用 JPA 注解来完成同样的工作。但是,了解 XML 映射文件仍然非常重要,特别是在需要进行更复杂的映射配置时。
下面是一个简单的 Hibernate 映射文件的例子,它展示了如何将一个简单的 Java 类映射到一个数据库表:
示例 Java 类
假设我们有一个 Person
类,它代表数据库中的 person
表。
package com.example.model;
public class Person {
private Integer id;
private String firstName;
private String lastName;
private int age;
// 构造函数、getter 和 setter 方法省略
}
映射文件
对于这个 Person
类,我们可以创建一个映射文件 Person.hbm.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"https://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.example.model.Person" table="person">
<id name="id" column="id">
<generator class="increment"/>
</id>
<property name="firstName" column="first_name"/>
<property name="lastName" column="last_name"/>
<property name="age" column="age"/>
</class>
</hibernate-mapping>
映射文件解析
让我们来逐行解析这个映射文件:
-
XML 声明:
<?xml version="1.0" encoding="UTF-8"?>
定义了 XML 文件的版本和编码。
-
DTD:
<!DOCTYPE hibernate-mapping ...>
定义了文档类型定义 (DTD),它指定了 Hibernate 映射文件的结构和规则。在这个例子中,我们使用的是 Hibernate 3.0 的 DTD。
-
根元素:
<hibernate-mapping>
是映射文件的根元素。
-
类元素:
<class>
定义了一个实体类及其对应的数据库表。name
: 实体类的完全限定名。table
: 数据库表的名称。
-
标识符元素:
<id>
定义了主键字段。name
: 主键字段的名称。column
: 数据库表中对应的列名。<generator>
: 主键的生成策略。这里使用的是increment
,意味着每次插入新记录时,主键值会自动递增。其他常见的策略有identity
,sequence
, 和native
。
-
属性元素:
<property>
定义了实体类中的非主键属性以及它们在数据库表中的对应列。name
: 属性的名称。column
: 数据库表中对应的列名。
配置 Hibernate
要让 Hibernate 识别这个映射文件,你需要将其添加到 Hibernate 的配置文件(通常是 hibernate.cfg.xml
或者 persistence.xml
)中。以下是 hibernate.cfg.xml
的一个简单示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"https://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/testdb</property>
<property name="hibernate.connection.username">username</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/example/model/Person.hbm.xml"/>
<!-- 其他配置省略 -->
</session-factory>
</hibernate-configuration>
使用映射文件
一旦你定义了映射文件,并且将其添加到了 Hibernate 的配置中,你就可以使用 Hibernate API 来操作数据库了。例如,你可以打开一个 Session,然后使用 save()
, update()
, get()
, delete()
等方法来进行 CRUD 操作。
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Person person = new Person();
person.setFirstName("John");
person.setLastName("Doe");
person.setAge(30);
session.save(person);
tx.commit();
} catch (HibernateException e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
总结
使用 XML 映射文件允许你在不修改 Java 类的情况下调整映射细节,这在一定程度上分离了业务逻辑与数据访问层。然而,在现代应用开发中,JPA 注解因为其简洁性和易用性而更为流行。不过,在需要进行复杂的映射配置时,XML 映射文件仍然是一个非常有用的工具。