Hibernate 是開源的對象關系映射(ORM)框架。它對 JDBC 進行輕量級封裝,建立 POJO 與數據庫表的映射關系,自動生成並執行 SQL,讓開發者以面向對象思維操作數據庫。可用於 Java SE 客戶端、Servlet/JSP Web 應用,也能在 J2EE 中替代 CMP 完成持久化。
lib/required/:核心依賴(hibernate-core、javassist、antlr 等)lib/jpa/:JPA API 依賴project/etc/:DTD/XSD 約束文件required 下所有 JAR + MySQL 驅動(mysql-connector-java-5.1.x.jar)+ 日誌實現(slf4j-api + log4j/logback)


CREATE DATABASE hibernate DEFAULT CHARSET utf8;
CREATE TABLE `cst_customer` (
`cust_id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT '客戶編號(主鍵)',
`cust_name` VARCHAR(32) NOT NULL COMMENT '客戶名稱(公司名稱)',
`cust_source` VARCHAR(32) DEFAULT NULL COMMENT '客戶信息來源',
`cust_industry` VARCHAR(32) DEFAULT NULL COMMENT '客戶所屬行業',
`cust_level` VARCHAR(32) DEFAULT NULL COMMENT '客戶級別',
`cust_phone` VARCHAR(64) DEFAULT NULL COMMENT '固定電話',
`cust_mobile` VARCHAR(16) DEFAULT NULL COMMENT '移動電話',
PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
public class Customer {
private Long custId;
private String custName;
private String custSource;
private String custIndustry;
private String custLevel;
private String custPhone;
private String custMobile;
// Getter/Setter 省略
}
命名規約:類名.hbm.xml,與實體類同包路徑(src/main/resources/com/hibernate/domain/)
<?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 package="com.hibernate.domain">
<class name="Customer" table="cst_customer">
<id name="custId" column="cust_id">
<generator class="native"/>
</id>
<property name="custName" column="cust_name"/>
<property name="custSource" column="cust_source"/>
<property name="custIndustry" column="cust_industry"/>
<property name="custLevel" column="cust_level"/>
<property name="custPhone" column="cust_phone"/>
<property name="custMobile" column="cust_mobile"/>
</class>
</hibernate-mapping>
獲取 DTD 約束技巧:Eclipse 中打開 hibernate-core-xxx.jar → org.hibernate → hibernate-mapping-3.0.dtd 複制前幾行,或離線配置 XML Catalog。





<?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:///hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!-- 方言:自動生成特定數據庫 SQL -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 調試:顯示/格式化 SQL -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- DDL 策略:update 自動建表/更新結構 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 加載映射文件 -->
<mapping resource="com/hibernate/domain/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
public class HibernateDemo1 {
@Test
public void demo1() {
// 1. 加載配置,創建 SessionFactory(線程安全,重量級,通常作單例)
Configuration cfg = new Configuration().configure();
SessionFactory sf = cfg.buildSessionFactory();
// 2. 開啟 Session(輕量級,非線程安全,請求級)
Session session = sf.openSession();
// 3. 開啟事務
Transaction tx = session.beginTransaction();
// 4. 業務操作
Customer customer = new Customer();
customer.setCustName("某某某");
session.save(customer); // 持久化
// 5. 提交事務
tx.commit();
// 6. 釋放資源
session.close();
sf.close(); // 應用關閉時調用
}
}

| 概念 | 對應 JDBC | 生命週期 |
|---|---|---|
| Configuration | 解析配置文件 | 啟動一次 |
| SessionFactory | 連接池/數據源 | 應用級單例 |
| Session | Connection | 請求級/事務級 |
| Transaction | Connection.commit/rollback | 事務級 |
| Query/Criteria | PreparedStatement | 查詢級 |
hbm2ddl.auto 取值:create(每次重建)、create-drop(結束刪表)、update(推薦開發)、validate(僅校驗)、none(生產環境)。<mapping> 路徑需與 src/resources 下相對路徑一致,區分大小寫。native(identity),Oracle 用 sequence,通用 uuid/assigned。完成第一個 CRUD,你已跨越 ORM 門檻。下一站:關聯映射、HQL/JPQL、緩存機制、性能調優。