首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

Hibernate 核心概念與實戰指南:從 ORM 映射到 HQL 查詢

     編輯:DB2 教學

Hibernate 核心概念與實戰指南

Hibernate 是 Java 生態系中最流行的 ORM(Object/Relational Mapping)框架,它實現了 JPA(Java Persistence API)規範,讓開發者能以面向對象的方式操作關係型數據庫,底層自動翻譯為 SQL 語句。本文將系統梳理 Hibernate 的核心配置、常用註解、HQL 查詢及完整代碼示例,助你快速上手。

1. 環境準備:Maven 依賴

在 pom.xml 中引入 Hibernate 核心庫、MySQL 驅動及 C3P0 連接池:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.3.10.Final</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>
<!-- C3P0 連接池依賴 -->
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.2</version>
</dependency>

2. 核心配置文件 hibernate.cfg.xml

通常置於 src 目錄下,配置數據源、連接池、方言及實體映射:

<?xml version='1.0' encoding='utf-8'?>
<hibernate-configuration>
    <session-factory>
        <!-- 數據庫連接基本信息 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/your_db</property>
        <property name="connection.username">root</property>
        <property name="connection.password">password</property>
        <property name="connection.characterEncoding">utf-8</property>

        <!-- C3P0 連接池優化 -->
        <property name="hibernate.c3p0.max_size">20</property>
        <property name="hibernate.c3p0.min_size">1</property>
        <property name="hibernate.c3p0.timeout">5000</property>
        <property name="hibernate.c3p0.max_statements">100</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>

        <!-- 開發階段顯示 SQL,生產建議關閉 -->
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- 實體類映射 -->
        <mapping class="com.example.entity.Student"/>
    </session-factory>
</hibernate-configuration>

3. 常用 JPA 註解詳解

註解作用關鍵屬性
@Entity標記該類為持久化實體—
@Table(name="studentTable")指定對應的數據庫表名name
@Id標識主鍵字段—
@Column(name="time_stamp")映射非同名列name
@Temporal(TemporalType.TIMESTAMP)映射日期時間類型value
@Transient忽略該字段,不持久化—

4. HQL 查詢基礎

HQL(Hibernate Query Language)面向對象,語法類似 SQL 但操作實體與屬性:

  • Session.createQuery("from Student where isGirl=true") 建立查詢
  • Query.list() 返回結果列表
  • 支持參數綁定、分頁、聚合函數等高級特性

5. 完整代碼示例:從配置到增刪改查

package com.example.entity;

import javax.persistence.*;
import java.util.Date;
import java.util.List;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

@Entity
@Table(name = "studentTable")
public class Student {
    @Id
    private int id;
    private String name;
    private boolean isGirl;

    @Column(name = "time_stamp")
    @Temporal(TemporalType.TIMESTAMP)
    private Date timestamp;

    // Getter/Setter 省略...

    public static void main(String[] args) {
        // 1. 加載配置並構建 SessionFactory
        Configuration conf = new Configuration().configure();
        ServiceRegistry registry = new ServiceRegistryBuilder()
                .applySettings(conf.getProperties()).buildServiceRegistry();
        SessionFactory sf = conf.buildSessionFactory(registry);

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

        // 3. 新增數據
        Student stu = new Student();
        stu.setName("qiqi");
        session.save(stu);

        // 4. 查詢所有女同學
        @SuppressWarnings("unchecked")
        List list = session.createQuery("from Student where isGirl=true").list();
        System.out.println(list);

        // 5. 提交事務並釋放資源
        tx.commit();
        session.close();
        sf.close();
    }
}

6. 最佳實踐提示

  • 生產環境關閉 hibernate.show_sql,改用日誌框架記錄 SQL。
  • 合理配置連接池參數,避免連接洩漏。
  • 優先使用 @Column 明確映射,減少維護歧義。
  • 大數據量查詢考慮分頁、投影及二級緩存。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved