本文完整記錄從零開始搭建 SpringMVC 4.1.4 + Hibernate 4.3.8 專案的全過程,涵蓋資料庫設計、Maven 依賴管理、Spring/Hibernate 配置、事務管理、二級快取、SpringMVC 整合到最終部署測試。
採用經典分層架構:
<properties>
<spring.version>4.1.4.RELEASE</spring.version>
<hibernate.version>4.3.8.Final</hibernate.version>
</properties>
<dependencies>
<!-- Spring 核心 -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency>
<!-- Hibernate -->
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>${hibernate.version}</version></dependency>
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-ehcache</artifactId><version>${hibernate.version}</version></dependency>
<!-- C3P0 連線池 / MySQL / Ehcache / JSON -->
<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5-pre10</version></dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.34</version></dependency>
<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>2.9.0</version></dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.5.0</version></dependency>
</dependencies>
重點包含:
LocalSessionFactoryBean 配置掃描 Entity 包、Hibernate 屬性、二級快取HibernateTransactionManager + AOP 宣告式事務(tx:advice + aop:config)<ehcache>
<diskStore path="D:/ehcache" />
<defaultCache maxElementsInMemory="1000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120"
overflowToDisk="true" memoryStoreEvictionPolicy="LRU" />
<cache name="org.andy.work.entity.AcctUser"
maxElementsInMemory="2" eternal="true" overflowToDisk="false" />
</ehcache>
使用 Hibernate Tools 自動生成後,需手動補充:
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE):啟用二級快取@JsonIgnoreProperties:防止 JSON 序列化循環引用(多對多、一對多關聯必加)<mvc:annotation-driven> + MappingJackson2HttpMessageConverter:自動 JSON 序列化OpenSessionInViewFilter:延遲 Session 關閉至 View 層,支援視圖中懶加載*.htmls,REST 風格設計clean compile packagehttps://localhost:8080/專案名/user/showInfo/{id}.htmls(頁面)https://localhost:8080/專案名/user/showInfos.htmls(JSON API)此架構為後續擴展 Spring Security、Redis、分頁插件等奠定堅實基礎。