Hibernate的hbm.xml映射文件用于将Java实体类与数据库表进行关联,明确两者之间的字段对应关系、主键生成策略等配置,是Hibernate实现ORM功能的重要基础。

hbm.xml文件的基本结构
一个标准的hbm.xml映射文件需要遵循Hibernate的DTD规范,基本结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 映射配置内容 -->
</hibernate-mapping>
其中<hibernate-mapping>是根元素,所有实体映射配置都需要放在这个元素内部。
核心配置元素说明
class元素
class元素用于配置单个实体类到数据库表的映射,常用属性如下:
- name:指定实体类的全限定类名
- table:指定对应的数据库表名,如果不配置则默认使用实体类名作为表名
- catalog:指定数据库实例名
- schema:指定数据库模式名
id元素
id元素用于配置实体类的主键映射,对应表中的主键字段,常用属性如下:
- name:实体类中主键属性的名称
- column:数据库表中主键字段的名称
- type:指定属性的Hibernate映射类型
主键生成策略通过<generator>子元素配置,常用策略有:
- native:根据底层数据库自动选择主键生成方式
- identity:依赖数据库的自增主键
- sequence:依赖数据库的序列生成主键
- uuid:生成唯一的UUID字符串作为主键
property元素
property元素用于配置实体类的普通属性到表字段的映射,常用属性如下:
- name:实体类属性的名称
- column:对应的数据库表字段名称
- type:属性的Hibernate映射类型
- length:字段的长度,适用于字符串类型
- not-null:是否允许字段为空,默认值为false
完整配置示例
以下是一个用户实体类对应的hbm.xml配置示例,假设实体类为com.example.User,对应数据库表t_user:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置User实体到t_user表的映射 -->
<class name="com.example.User" table="t_user">
<!-- 主键配置 -->
<id name="id" column="id" type="java.lang.Long">
<generator class="native"/>
</id>
<!-- 普通属性配置 -->
<property name="username" column="username" type="java.lang.String" length="50" not-null="true"/>
<property name="password" column="password" type="java.lang.String" length="100" not-null="true"/>
<property name="email" column="email" type="java.lang.String" length="100"/>
<property name="createTime" column="create_time" type="java.util.Date"/>
</class>
</hibernate-mapping>
注意事项
在配置hbm.xml文件时需要注意以下几点:
- 实体类的属性类型要和Hibernate映射类型匹配,避免出现类型转换错误
- 如果实体类属性名和表字段名一致,可以省略column属性的配置
- DTD文件的引入要正确,否则Hibernate解析映射文件时会报错
- 修改hbm.xml文件后需要重启应用才能让配置生效,或者在Hibernate配置中开启自动更新映射的功能
掌握hbm.xml映射文件的配置后,就可以灵活实现Java实体类和数据库表的映射,为后续的持久化操作打下基础。