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

Spring 整合 Hibernate 完整配置指南:從 Jar 引入到 SessionFactory 構建

     編輯:Java 綜合教學

Spring + Hibernate 整合全流程:配置文件、實體映射、事務管理一站式落地

Hibernate 作為經典 ORM 框架,通過簡單配置替代繁瑣 JDBC 代碼。本文梳理 **Jar 依賴、hibernate.cfg.xml 核心配置、實體映射文件、Spring 容器整合、SessionFactory 構建與事務模板使用** 的完整步驟,代碼可直接複製到項目中運行。

一、Maven 依賴(核心)

<dependencies>
    <!-- Hibernate 核心 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.6.15.Final</version>
    </dependency>
    <!-- Spring ORM 整合包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>5.3.27</version>
    </dependency>
    <!-- 數據庫驅動(以 Oracle 為例) -->
    <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc8</artifactId>
        <version>21.9.0.0</version>
    </dependency>
    <!-- 連接池 HikariCP -->
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>5.0.1</version>
    </dependency>
</dependencies>

二、hibernate.cfg.xml 核心配置

<?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">oracle.jdbc.OracleDriver</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="hibernate.connection.username">WZ</property>
        <property name="hibernate.connection.password">*****</property>
        <!-- 方言 & 優化 -->
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="hibernate.format_sql">true</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 實體映射文件引用 -->
        <mapping resource="com/entity/Student.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

三、實體映射文件

<?xml version="1.0"?>
<!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.entity">
    <class name="Student" table="T_STUDENT">
        <id name="id" column="STU_NO">
            <generator class="sequence">
                <param name="sequence">SEQ_STUDENT</param>
            </generator>
        </id>
        <property name="name" column="STU_NAME"/>
        <property name="age" column="STU_AGE"/>
    </class>
</hibernate-mapping>

主鍵生成策略:increment(內存自增)、sequence(數據庫序列)、identity(自增列)、native(自適應)、assigned(手動分配)。

四、Spring 整合配置

<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:tx="https://www.springframework.org/schema/tx"
       xmlns:context="https://www.springframework.org/schema/context">

    <!-- 數據源 -->
    <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
        <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
        <property name="username" value="WZ"/>
        <property name="password" value="*****"/>
    </bean>

    <!-- SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
        <property name="packagesToScan" value="com.entity"/>
    </bean>

    <!-- 事務管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <!-- 註解驅動事務 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <context:component-scan base-package="com"/>
</beans>

五、DAO 與 Service 使用範例

@Repository
public class StudentDao {
    @Autowired private SessionFactory sessionFactory;
    public void save(Student s) { sessionFactory.getCurrentSession().save(s); }
}

@Service
@Transactional
public class StudentService {
    @Autowired private StudentDao dao;
    public void register(Student s) { dao.save(s); }
}

六、關鍵點提示

  • hibernate.current_session_context_class=thread 確保 Spring 管理的 Session 與線程綁定;
  • hbm2ddl.auto=update 僅開發環境使用,生產建議 validate 或由 Flyway/Liquibase 管理結構;
  • 優先使用 **註解映射** 或 **JPA 標準註解**,XML 映射僅用於歷史項目維護;
  • 事務邊界在 Service 層用 @Transactional 聲明,避免在 DAO 層手動控制事務。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved