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

手把手搭建 SpringMVC + Spring + Hibernate 整合平台(含完整依賴與配置)

     編輯:Java 綜合教學

開發環境準備

  • IDE:Eclipse IDE for Java EE Developers(建議 32 位)
  • 資料庫:MySQL Server(32 位)
  • JDK:Java SE Development Kit 6u45(32 位)
  • 容器:apache-tomcat-6.0.48

核心依賴庫版本選型說明

框架版本說明
Spring Framework4.3.4.RELEASEspring-aop, beans, context, core, jdbc, orm, tx, web, webmvc 等模組
AspectJ1.8.9Spring AOP 依賴,aspectjweaver.jar
Hibernate4.2.21.Final支援 Java 1.6 的最高穩定版,含 core, jpa, javassist 等
SLF4J1.7.21jcl-over-slf4j, slf4j-api, slf4j-log4j12
Log4j1.2.17支援 Java 1.6 / Spring 4.3.4 的最高穩定版
log4jdbc41.2.1SQL 攔截輸出完整語句
Fastjson1.2.21JSON 處理
MySQL Connector/J5.1.40JDBC 驅動
Commons Lang33.5工具庫

工程結構建立

  1. Eclipse → File → New → Dynamic Web Project,專案名 ims,輸出目錄改為 WebContent/WEB-INF/classes
  2. 所有 JAR 放入 WebContent/WEB-INF/lib
  3. 源碼包結構:
src
└─ com.ims
   ├─ common
   ├─ persistence
   │  ├─ base
   │  ├─ dao
   │  │  ├─ xxx
   │  │  │  └─ impl
   │  │  └─ model
   │  │     └─ xxx
   ├─ service
   │  ├─ xxx
   │  │  └─ impl
   └─ web
      └─ controller
         └─ xxx

核心配置文件

applicationContext.xml(公共掃描與 log4jdbc)

<context:component-scan base-package="com" use-default-filters="false">
  <context:include-filter type="aspectj" expression="com.ims.persistence.dao..*.impl.*DaoImpl"/>
  <context:include-filter type="aspectj" expression="com.ims.service..*.impl.*BSImpl"/>
</context:component-scan>

<!-- log4jdbc SQL 攔截 -->
<bean id="log4jdbcInterceptor" class="net.sf.log4jdbc.DataSourceSpyInterceptor" />
<bean id="dataSourceLog4jdbcAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  <property name="interceptorNames"><list><value>log4jdbcInterceptor</value></list></property>
  <property name="beanNames"><list><value>sysDatasource</value><value>mmsDatasource</value></list></property>
</bean>

applicationContextXxx.xml(子模組獨立數據源、SessionFactory、事務)

<bean id="xxxDatasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:3306/xxx?characterEncoding=utf8"/>
  <property name="username" value="root"/>
  <property name="password" value="123456"/>
</bean>

<bean id="xxxSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
  <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
  <property name="dataSource" ref="xxxDatasource"/>
  <property name="packagesToScan"><list><value>com.ims.persistence.model.xxx</value></list></property>
</bean>

<bean id="xxxTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
  <property name="sessionFactory" ref="xxxSessionFactory"/>
</bean>

<tx:advice id="xxxTxAdvice" transaction-manager="xxxTransactionManager">
  <tx:attributes>
    <tx:method name="find*" isolation="READ_COMMITTED" read-only="true"/>
    <tx:method name="get*" isolation="READ_COMMITTED" read-only="true"/>
    <tx:method name="*" isolation="READ_COMMITTED" rollback-for="Throwable"/>
  </tx:attributes>
</tx:advice>

<aop:config>
  <aop:pointcut id="xxxTxPointcut" expression="execution(* com.ims.service.xxx.impl..*BSImpl.*(..))"/>
  <aop:advisor advice-ref="xxxTxAdvice" pointcut-ref="xxxTxPointcut" order="0"/>
</aop:config>

<bean id="xxxBaseDao" class="com.ims.persistence.dao.xxx.impl.XxxBaseDaoImpl">
  <property name="sessionFactory" ref="xxxSessionFactory"/>
</bean>

controllerServlet.xml(SpringMVC 配置)

<mvc:annotation-driven />
<context:component-scan base-package="com" use-default-filters="false">
  <context:include-filter type="aspectj" expression="com.ims.web.controller..*Controller"/>
</context:component-scan>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/view/"/>
</bean>

hibernate.cfg.xml(C3P0 連接池與方言)

<property name="hibernate.order_updates">true</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.c3p0.max_size">30</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.timeout">3000</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="c3p0.idle_test_period">121</property>
<property name="c3p0.acquire_increment">1</property>
<property name="c3p0.validate">true</property>
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

log4j.properties(日誌輸出與 SQL 計時)

log4j.rootLogger=WARN,console,roll
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.roll=org.apache.log4j.DailyRollingFileAppender
log4j.appender.roll.File=${catalina.base}/logs/ims/ims.log
log4j.appender.roll.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p %t %c %m%n
log4j.logger.com.ims=WARN
log4j.logger.jdbc.sqltiming=INFO

基礎類與目錄約定

  • 基礎 Controller:BaseController → 子模組 XxxBaseController
  • 基礎 DAO:介面 XxxBaseDao → 實現 XxxBaseDaoImpl 注入 xxxSessionFactory
  • WebContent 目錄:
WebContent
├─ common
├─ content (css, images, js)
├─ sql/xxx
├─ view/xxx
└─ viewModel/xxx

web.xml 完整配置

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml, classpath:applicationContextXxx.xml</param-value>
</context-param>
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
<listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener>
<filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
  <init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param>
</filter>
<servlet>
  <servlet-name>controller</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param><param-name>contextConfigLocation</param-name><param-value>classpath:controllerServlet.xml</param-value></init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>controller</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>

啟動驗證

部署至 Tomcat,訪問 *.do 請求,觀察控制台 SQL 輸出與日誌文件生成情況。若報缺少 JAR,請核對 WEB-INF/lib 完整性;若編碼亂碼,確認 CharacterEncodingFilter 與資料庫 URL characterEncoding=utf8 一致。

專案結構圖 JAR 列表示意 包結構圖 配置文件圖示 目錄結構圖 web.xml 圖示

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved