首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Hibernate 連接 MySQL 完整配置範例:hibernate.cfg.xml 核心屬性詳解

     編輯:MySQL 資料庫相關知識

標準 hibernate.cfg.xml 範例 (MySQL 5.x/8.x 通用)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "https://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <!-- 顯示 SQL,開發階段建議開啟 -->
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>

    <!-- SQL 方言:MySQL 5.7+ 用 MySQL57Dialect,8.0+ 用 MySQL8Dialect -->
    <property name="dialect">org.hibernate.dialect.MySQL57Dialect</property>

    <!-- 批次抓取 / 批次刪除優化 -->
    <property name="jdbc.fetch_size">50</property>
    <property name="jdbc.batch_size">30</property>

    <!-- 連線資訊 -->
    <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/dbname?useSSL=false&serverTimezone=Asia/Taipei&characterEncoding=utf8</property>
    <property name="connection.username">root</property>
    <property name="connection.password">password</property>

    <!-- 連線池 (生產建議改用 HikariCP) -->
    <property name="hibernate.connection.pool_size">10</property>

    <!-- 實體映射檔 -->
    <mapping resource="com/example/entity/User.hbm.xml"/>
    <mapping resource="com/example/entity/Org.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

核心屬性詳細說明

屬性說明推薦值/備註
dialectSQL 方言,決定生成的 SQL 語法MySQL 5.7: MySQL57Dialect / 8.0: MySQL8Dialect
connection.driver_classJDBC 驅動類5.x: com.mysql.jdbc.Driver / 8.x: com.mysql.cj.jdbc.Driver
connection.urlJDBC URL必加 useSSL=false, serverTimezone, characterEncoding=utf8
show_sql控制台輸出 SQL開發 true / 生產 false
hibernate.hbm2ddl.auto啟動時自動建表/更新validate / update / create-drop (僅開發/測試)
jdbc.batch_size批次 INSERT/UPDATE/DELETE20-50,配合 @DynamicInsert 效果最佳
connection.provider_class連線池實現生產必改:org.hibernate.hikaricp.internal.HikariCPConnectionProvider

MySQL 8.0 關鍵遷移點

  • 驅動包:mysql-connector-java-8.x.jar (Maven: mysql:mysql-connector-java:8.0.x)
  • 驅動類:com.mysql.cj.jdbc.Driver (舊 com.mysql.jdbc.Driver 已棄用)
  • URL 參數:useSSL=false (預設 true 會警告)、serverTimezone=Asia/Taipei (避免時區解析錯誤)
  • 方言:MySQL8Dialect 支援 CTE、窗口函數、JSON 函數下推
  • 認證插件:預設 caching_sha2_password,舊客戶端需在 URL 加 allowPublicKeyRetrieval=true 或用戶改 mysql_native_password

依賴管理

<!-- Maven 範例 -->
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>5.6.15.Final</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.33</version>
</dependency>
<!-- 生產連線池 -->
<dependency>
  <groupId>com.zaxxer</groupId>
  <artifactId>HikariCP</artifactId>
  <version>5.0.1</version>
</dependency>

常見坑位速查

Table 'xxx' doesn't exist
現象原因解決
Communications link failureMySQL 8 服務端預設需 SSLURL 加 useSSL=false 或配置 SSL 憑證
CST timezone unknownJVM 時區與 MySQL 不匹配URL 加 serverTimezone=Asia/Taipei
Public Key Retrieval is not allowedcaching_sha2_password 握手失敗URL 加 allowPublicKeyRetrieval=true 或改用 native_password
hbm2ddl.auto 未建表開發用 update,生產用 Flyway/Liquibase 遷移
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved