首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Hibernate 入門:核心概念與 HelloWorld 完整實戰

     編輯:Java 綜合教學

Hibernate 入門:核心概念與 HelloWorld 完整實戰

一、Hibernate 核心概念速覽

概念說明
持久化框架將內存對象永久保存到數據庫(狹義);廣義上包含 CRUD 等所有數據庫操作
ORM (Object-Relational Mapping)對象關系映射:類↔表、對象↔行、屬性↔列。通過映射文件描述對應關系
hibernate.cfg.xml全局配置文件:數據庫連接、方言、映射文件引用、緩存策略等
Entity.hbm.xml對象關系映射文件:定義實體類與表的字段映射、主鍵策略、關聯關系
Session核心接口:單線程、短生命周期、一級緩存持有者,相當於 JDBC Connection
SessionFactory重量級工廠:線程安全、應用啟動構建一次,根據配置生成 Session
Transaction事務接口:通過 Session.openTransaction() 獲取,支持 ACID

二、HelloWorld 完整步驟 (IntelliJ IDEA 環境)

1. 生成 hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "https://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 數據庫連接 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <!-- Hibernate 核心屬性 -->
        <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
        <!-- 映射文件 -->
        <mapping resource="com/nucsoft/hibernate/News.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

2. 實體類 News.java

package com.nucsoft.hibernate;
import java.util.Date;

public class News {
    private int id;
    private String title, author;
    private Date date;
    // Getter/Setter、equals/hashCode 省略
}

3. 映射文件 News.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.nucsoft.hibernate.News" table="news" schema="hibernate">
        <id name="id">
            <column name="id" sql-type="int(11)"/>
        </id>
        <property name="title">
            <column name="title" sql-type="varchar(255)" not-null="true"/>
        </property>
        <property name="author">
            <column name="author" sql-type="varchar(50)" length="50" not-null="true"/>
        </property>
        <property name="date">
            <column name="date" sql-type="date" not-null="true"/>
        </property>
    </class>
</hibernate-mapping>

4. 測試代碼:保存對象

@Test
public void testSave() {
    // 1. 構建 SessionFactory
    Configuration cfg = new Configuration().configure(); // 默認讀取 classpath:hibernate.cfg.xml
    ServiceRegistry sr = new ServiceRegistryBuilder()
        .applySettings(cfg.getProperties()).buildServiceRegistry();
    SessionFactory sf = cfg.buildSessionFactory(sr);

    // 2. 開啟 Session
    Session session = sf.openSession();
    // 3. 開啟事務
    Transaction tx = session.beginTransaction();

    // 4. 執行持久化操作
    News news = new News();
    news.setTitle("Title");
    news.setAuthor("tom");
    news.setDate(new Date(System.currentTimeMillis()));
    session.save(news);

    // 5. 提交事務
    tx.commit();
    // 6. 關閉資源
    session.close();
    sf.close();
}

關鍵說明

  • Configuration.configure() 默認加載 classpath 下的 hibernate.cfg.xml
  • Hibernate 4/5 引入 ServiceRegistry 管理服務,構建 SessionFactory 需傳入
  • 事務邊界務必明確:beginTransaction() → 操作 → commit()/rollback()
  • 生產環境中 SessionFactory 由 Spring 管理,無需手動開關

三、學習路線圖總結

從 HelloWorld 入門,後續深入學習建議按以下模塊推進:

  1. 配置深度:數據源、連接池、方言、二級緩存(Ehcache/Redis)、批處理優化
  2. 映射進階:關聯映射(一對多、多對多、雙向)、繼承映射、組件映射、動態模型
  3. Session 核心:生命周期、三種狀態(瞬時/持久/游離)、一級緩存機制、flush 機制
  4. 查詢方式:HQL、Criteria API、Native SQL、分頁、投影、命名查詢
  5. 事務與併發:隔離級別、樂觀/悲觀鎖、版本號、事務傳播行為
  6. 性能調優:N+1 問題、批量插入、延遲加載策略、查詢緩存、統計分析
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved