hibernate.cfg.xml是Hibernate框架的核心配置文件,所有和数据库交互的基础参数、框架运行规则都需要在该文件中定义,正确配置这个文件是使用Hibernate进行持久层开发的第一步。

hibernate.cfg.xml基础结构
该文件需要放在项目的类路径(classpath)下,通常是src/main/resources目录,基础结构遵循XML规范,首先需要声明XML版本和编码,然后引入Hibernate的DTD约束,约束的作用是让编辑器校验配置项的合法性,避免写错配置标签。
基础结构代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 配置内容写在这里 -->
</session-factory>
</hibernate-configuration>
核心必配项说明
所有Hibernate项目都必须配置以下几项内容,否则无法和数据库建立连接。
1. 数据库连接信息
需要配置数据库的驱动类、连接地址、用户名和密码,不同数据库的参数值不同,以下是常见数据库的配置示例:
| 配置项 | MySQL8+配置值 | PostgreSQL配置值 |
|---|---|---|
| hibernate.connection.driver_class | com.mysql.cj.jdbc.Driver | org.postgresql.Driver |
| hibernate.connection.url | jdbc:mysql://127.0.0.1:3306/test_db?useSSL=false&serverTimezone=UTC | jdbc:postgresql://127.0.0.1:5432/test_db |
| hibernate.connection.username | root | postgres |
| hibernate.connection.password | 123456 | 123456 |
2. 数据库方言配置
Hibernate通过方言来适配不同数据库的SQL语法差异,必须配置对应的方言类,否则生成的SQL可能无法在目标数据库执行。MySQL8+的方言配置为:
<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
PostgreSQL的方言配置为:
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL10Dialect</property>
3. 实体映射文件引入
如果使用hbm.xml映射文件来关联实体类和数据库表,需要在配置文件中引入这些映射文件,每个映射文件对应一个<mapping>标签:
<!-- 引入User实体对应的映射文件 --> <mapping resource="com/example/entity/User.hbm.xml"/> <!-- 引入Order实体对应的映射文件 --> <mapping resource="com/example/entity/Order.hbm.xml"/>
如果使用JPA注解来配置映射关系,则不需要引入hbm.xml文件,改为配置实体类的全限定名:
<mapping class="com.example.entity.User"/> <mapping class="com.example.entity.Order"/>
常用可选配置项
以下配置项可以根据项目需求选择性添加,能够提升开发效率或者优化框架运行效果。
- hibernate.show_sql:设置为true时,会在控制台打印Hibernate生成的SQL语句,方便调试,默认值为false。
- hibernate.format_sql:设置为true时,打印的SQL语句会自动格式化,可读性更强,需要和hibernate.show_sql配合使用。
- hibernate.hbm2ddl.auto:设置实体类和数据库表的同步策略,常用值有update(自动更新表结构,不会删除现有数据)、create(每次启动重新创建表,会丢失数据)、validate(校验表结构和实体类是否匹配,不匹配则报错)。
- hibernate.current_session_context_class:设置Session的上下文管理方式,本地项目配置为thread即可,让Session和当前线程绑定。
完整配置示例
以下是一个可用的MySQL8+环境的hibernate.cfg.xml完整配置,新手可以直接修改数据库连接参数后复用:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库连接配置 -->
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test_db?useSSL=false&serverTimezone=UTC&characterEncoding=utf8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- 数据库方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
<!-- 可选配置 -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.current_session_context_class">thread</property>
<!-- 映射配置,这里使用注解方式示例 -->
<mapping class="com.example.entity.User"/>
</session-factory>
</hibernate-configuration>
配置注意事项
配置过程中需要注意几个常见问题:首先是XML中的特殊字符转义,比如连接URL中的&符号需要转义为&,否则文件会报错。其次是配置项的标签名和属性值不要写错,所有property的name属性都是Hibernate预定义的,写错会导致配置不生效。最后是映射文件的路径要正确,resource属性对应的是类路径下的相对路径,不要写绝对路径。
完成配置后,可以通过编写简单的测试代码来验证配置是否正确,比如获取SessionFactory对象,如果没有抛出异常说明配置基本正确。
Hibernatehibernate.cfg.xmlORM数据库配置修改时间:2026-07-08 02:03:33