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

Java 三大框架之 Hibernate 核心概念、工作流程與實戰代碼詳解

     編輯:Java 綜合教學

什麼是 Hibernate?

Hibernate 是基於 ORM(Object-Relational Mapping,對象關係映射) 的持久層框架,本質上是對 JDBC 的輕量級封裝,旨在簡化資料庫 CRUD(Create、Retrieve、Update、Delete) 操作。註:原文寫作 CUPD,實為 CRUD 之誤。

六大核心接口與類

名稱職責
Session負責持久化操作(增刪改查),非線程安全,生命週期短,請勿跨線程共用。
SessionFactory重量級、線程安全,負責初始化配置、建立 Session,通常作為單例存在。
Transaction管理事務邊界(begin/commit/rollback)。
Query執行 HQL 或原生 SQL 查詢,支援參數綁定、分頁限制。
Criteria面向對象的標準化查詢 API,輕量級,必須在 Session 內使用。
Configuration啟動時讀取映射文件(.hbm.xml / hibernate.cfg.xml),構建 SessionFactory,生命週期極短。

持久化操作七步驟

  1. 建立 Configuration 並載入 hibernate.cfg.xml
  2. 構建 SessionFactory
  3. 開啟 Session
  4. 開啟事務(查詢可省略)
  5. 透過 Session 執行 CRUD
  6. 提交事務(查詢可省略)
  7. 關閉 Session 釋放資源

實戰代碼範例

public class HibernateTest {
    public void testCrud() {
        // 1~2. 配置與 SessionFactory
        Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
        SessionFactory sf = cfg.buildSessionFactory();

        // 3. 開啟 Session
        Session session = sf.openSession();

        // 4. 開啟事務
        Transaction tx = session.beginTransaction();

        try {
            // 5. CRUD 範例
            User user = new User();
            user.setName("Washington");

            session.save(user);                       // 新增
            // session.delete(user);                  // 刪除
            // session.update(user);                  // 修改
            // User u = session.get(User.class, id);  // 主鍵查詢

            // HQL 查詢
            Query query = session.createQuery("from User");
            List<User> list = query.list();

            // 原生 SQL
            SQLQuery sqlQ = session.createSQLQuery("select * from User").addEntity(User.class);
            List<User> sqlList = sqlQ.list();

            // Criteria 查詢
            Criteria criteria = session.createCriteria(User.class);
            criteria.add(Restrictions.ilike("name", "Washington%"));

            // 6. 提交事務
            tx.commit();
        } catch (Exception e) {
            if (tx != null) tx.rollback();
            throw e;
        } finally {
            // 7. 關閉 Session
            session.close();
        }
    }
}

關鍵提醒

  • Session 非線程安全,Web 環境請採用 ThreadLocal 或 Spring 的 OpenSessionInViewFilter 管理。
  • 優先使用 HQL / Criteria,避免硬編碼 SQL 導致可移植性下降。
  • 大批量操作請使用 ScrollableResults 或批次處理,避免 OOM。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved