本文記錄經典 SSM(Spring + Spring MVC + MyBatis/Hibernate)前身——Spring 3 整合 Hibernate 4 的核心 XML 配置,涵蓋數據源、SessionFactory、事務管理器與註解驅動,適用於維護舊專案或理解整合原理。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/testroom?useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
useUnicode=true&characterEncoding=UTF-8 解決中文亂碼。<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.connection.autocommit">true</prop>
</props>
</property>
<!-- 映射檔掃描 -->
<property name="mappingResources">
<list>
<value>cn/lt/entity/User.hbm.xml</value>
<value>cn/lt/entity/Questions.hbm.xml</value>
<value>cn/lt/entity/fraction.hbm.xml</value>
</list>
</property>
</bean>
org.springframework.orm.hibernate4.LocalSessionFactoryBean(原文誤寫為 hibernate3)。hbm2ddl.auto=update 僅開發環境使用,生產嚴禁。packagesToScan 掃描實體類註解(@Entity),減少 XML 維護。<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 註解驅動事務 -->
<tx:annotation-driven transaction-manager="transactionManager" />
@Transactional 即可聲明式事務。<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="https://www.springframework.org/schema/tx"
xsi:schemaLocation="...">
<!-- 1. 數據源 -->
<bean id="dataSource" ... />
<!-- 2. SessionFactory -->
<bean id="sessionFactory" ... />
<!-- 3. 事務管理器 -->
<bean id="transactionManager" ... />
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 4. DAO/Service 掃描 -->
<context:component-scan base-package="cn.lt.dao, cn.lt.service" />
</beans>
| 問題 | 解決/建議 |
|---|---|
| Hibernate 版本不匹配 | Spring 3.x 對應 Hibernate 3/4,Spring 4+ 建議用 Hibernate 5,Spring Boot 2.x 直接 spring-boot-starter-data-jpa |
| 映射檔維護繁瑣 | 改用 JPA 註解(@Entity, @Table, @Column)+ packagesToScan |
| DBCP 性能瓶頸 | 換用 HikariCP:com.zaxxer.hikari.HikariDataSource |
| Struts 2 整合 | struts2-spring-plugin 讓 Struts Action 由 Spring 管理,注入 Service |
Spring 管理 Hibernate 核心在於 LocalSessionFactoryBean 整合數據源與映射元數據,HibernateTransactionManager 綁定 Session 與事務邊界,tx:annotation-driven 啟用 AOP 織入。掌握這三個 Bean 的配置關係,即掌握了 SSM/H 整合的靈魂。