1. 程式人生 > >整合spring,hibernate4,junit

整合spring,hibernate4,junit

論壇上有另外一篇更全面的帖子,jinnianshilongnian寫的:http://www.iteye.com/topic/1120924 

本文的環境是: 
spring-framework-3.1.0 
hibernate-4.1.6 
junit-4.10 

這裡大部分是參考我以前熟悉的配置方法,只是把hibernate3升級到hibernate4,其實差不了很多,只要注意幾個要點: 

1、以前整合hibernate3和spring的時候,spring的ORM包裡提供了HibernateSupport和HibernateTemplate這兩個輔助類,我用的是HibernateTemplate。不過在Hibernate4裡,spring不再提供這種輔助類,用的是hibernate4的原生API 


2、整合hibernate4之後,最小事務級別必須是Required,如果是以下的級別,或者沒有開啟事務的話,無法得到當前的Session 
Java程式碼  收藏程式碼
  1. sessionFactory.getCurrentSession();  

執行這行程式碼,會丟擲No Session found for current thread 

對於執行時,這個可能不是很大的問題,因為在Service層一般都會開啟事務,只要保證級別高於Required就可以了。可是由於在Dao層是不會開啟事務的,所以針對Dao層進行單元測試就有困難了。 

解決的辦法是,或者在Dao層的單元測試類上,開啟事務。或者專門準備一個for unit test的配置檔案,在Dao層就開啟事務。我採用的是前者 


首先是目錄結構,這裡暫時還沒有整合struts2、spring-mvc等web框架,也尚未包含js、css、jsp等目錄 



這裡除了servlet規範規定的web.xml必須放在WEB-INF下之外,其他的所有配置檔案,都放在src根目錄下。這樣做的好處是,後續所有需要引用配置檔案的地方,都可以統一用classpath:字首找到配置檔案。之前試過有的檔案放在WEB-INF下,有的放在src根目錄下,所以在引用的地方會不太統一,比較麻煩。 

當然無論配置檔案怎麼放,只要恰當使用classpath:和file:字首,都是能找到的,只是個人選擇的問題。另外,由於現在配置檔案還比較少,所以直接扔到src根目錄下沒什麼問題,如果配置檔案增多了,可以再進行劃分 


接下來是web.xml 
Xml程式碼  收藏程式碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"   
  6.     id="WebApp_ID" version="3.0">  
  7.     <display-name>DevelopFramework</display-name>  
  8.     <context-param>  
  9.         <param-name>contextConfigLocation</param-name>  
  10.         <param-value>classpath:beans.xml</param-value>   
  11.     </context-param>  
  12.     <listener>    
  13.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    
  14.     </listener>    
  15.     <servlet>    
  16.         <servlet-name>CXFServlet</servlet-name>    
  17.         <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>    
  18.         <load-on-startup>1</load-on-startup>    
  19.     </servlet>    
  20.     <servlet-mapping>    
  21.         <servlet-name>CXFServlet</servlet-name>    
  22.         <url-pattern>/webservice/*</url-pattern>    
  23.     </servlet-mapping>  
  24. </web-app>  

這裡沒有什麼要特別注意的,只是聲明瞭beans.xml的路徑。這裡的servlet是配置cxf的,與hibernate沒有關係。因為目標是要搭一個完整的開發框架,所以把cxf也事先放上了 

接下來是spring的配置檔案beans.xml 
Xml程式碼  收藏程式碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xmlns:jaxws="http://cxf.apache.org/jaxws"  
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  8.                             http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
  9.                             http://www.springframework.org/schema/context  
  10.                             http://www.springframework.org/schema/context/spring-context-3.1.xsd  
  11.                             http://www.springframework.org/schema/tx  
  12.                             http://www.springframework.org/schema/tx/spring-tx-3.1.xsd  
  13.                             http://cxf.apache.org/jaxws   
  14.                             http://cxf.apache.org/schemas/jaxws.xsd">  
  15.     <import resource="classpath:META-INF/cxf/cxf.xml" />  
  16.     <context:component-scan base-package="com.huawei.inoc.framework" />  
  17.     <bean id="propertyConfigurer"  
  18.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  19.         <property name="locations">  
  20.             <list>  
  21.                 <value>classpath:jdbc.properties</value>  
  22.             </list>  
  23.         </property>  
  24.     </bean>  
  25.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
  26.         <property name="driverClass" value="${driverClass}" />  
  27.         <property name="jdbcUrl" value="${jdbcUrl}" />  
  28.         <property name="user" value="${user}" />  
  29.         <property name="password" value="${password}" />  
  30.     </bean>  
  31.     <bean id="sessionFactory"  
  32.         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
  33.         <property name="dataSource" ref="dataSource" />  
  34.         <property name="mappingLocations" value="classpath:/com/huawei/inoc/framework/model/**/*.hbm.xml" />  
  35.         <property name="hibernateProperties">  
  36.             <props>  
  37.                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>  
  38.                 <prop key="hibernate.show_sql">true</prop>  
  39.                 <prop key="hibernate.format_sql">true</prop>  
  40.                 <prop key="hibernate.jdbc.fetch_size">50</prop>  
  41.                 <prop key="hibernate.jdbc.batch_size">25</prop>  
  42.                 <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>  
  43.             </props>  
  44.         </property>  
  45.     </bean>  
  46.     <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
  47.         <property name="sessionFactory" ref="sessionFactory" />  
  48.     </bean>  
  49.     <tx:annotation-driven transaction-manager="transactionManager" />  
  50.     <jaxws:endpoint id="helloWorld" implementor="#helloWorldWebserviceImpl" address="/HelloWorld" />  
  51.     <jaxws:client id="client"    
  52.         serviceClass="com.huawei.inoc.dummy.webservice.IDemoSupport"    
  53.         address="http://localhost:8080/Dummy/webservice/getDate" />    
  54. </beans>  

這裡有幾點要注意的: 
Xml程式碼  收藏程式碼
  1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
  2.         <property name="driverClass" value="${driverClass}" />  
  3.         <property name="jdbcUrl" value="${jdbcUrl}" />  
  4.         <property name="user" value="${user}" />  
  5.         <property name="password" value="${password}" />  
  6.     </bean>  

這裡把jdbc驅動的引數,放到了專門的配置檔案裡,改動起來會比較方便。另外資料庫連線池在實際生產環境可以考慮切換一下,比如聽說阿里巴巴出的druid就挺不錯,jboss和WAS自帶的連線池也是不錯的 
Xml程式碼  

相關推薦

整合spring,hibernate4,junit

論壇上有另外一篇更全面的帖子,jinnianshilongnian寫的:http://www.iteye.com/topic/1120924  本文的環境是:  spring-framework-3.1.0  hibernate-4.1.6  junit-4.

Spring+Hibernate4 Junit 報錯No Session found for current thread

論壇上有另外一篇更全面的帖子,jinnianshilongnian寫的:http://www.iteye.com/topic/1120924  本文的環境是:  spring-framework-3.1.0  hibernate-4.1.6  junit-

SpringJunit測試整合

color ati ring1 cat with IT 整合 位置 per 一、引入spring測試包:text包 二、@RunWith:指定spring對junit提供的一個運行器   @ContextConfiguration: locations指定spring配置

Spring整合Spring MVC及Mybatis進行Junit單元測試

我們可以在不啟動服務的情況下,進行單元測試,以便提交出高質量的程式碼。本文以一個小例子,說明在Spring中如何進行單元測試。 一:測試Controller 1:在pom.xml檔案中引入相關依賴 <properties> <!-- 設定專案編碼編碼 --&

junit整合Spring

作為一個小萌新,今天看文章發現junit可以實現對Spring的測試,對於一些複雜的操作都進行了不少的簡化 首先要對希望測試的類新增單元 點選選擇要測試的方法,完成 import org.junit.Test; import javax.annot

Spring+MyBatis+JUnit整合測試的搭建過程總結

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema

Springjunit測試整合

簡介 Spring提供spring-test-5.2.1.RELEASE.jar 可以整合junit。 優勢:可以簡化測試程式碼(不需要手動建立上下文,即手動建立spring容器) 使用spring和junit整合的步驟 1.匯入jar包 2.建立包com.igeek.test,建立類SpringTest

CXF WebService整合Spring

部分 控制 utf 內容 使用 mes classpath html row 首先,CXF和spring整合需要準備如下jar包文件: 這邊我是用Spring的jar包是Spring官方提供的,並沒有使用CXF中的Spring的jar文件。 添加這麽多文件後,首先在web

整合 Spring + SpringMVC + MyBatis

provide star 實現 per ng- 獲取自增 check fas manage < 一 > POM 配置文件 ( 如果出現 JAR 包 引入錯誤, 請自行下載 ) <project xmlns="http://maven.apach

RabbitMQ整合spring

username cep virtual containe 1.7 dconf system xmlns war 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://ww

MyBatis使用總結+整合Spring

hal bench his nic sig cti chan ive sha Java%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E6%97%A5%E5%B8%B8%E2%80%94%E2%80%94%20%E3%80%8A%E7%BC%96%

CXF整合spring,在tomcat中發布webService

load loader print protect 分享 list factor 信息 ioe 1、首先下載CXF的jar包 http://pan.baidu.com/s/1dFBwSRf 密碼: qyax。裏面自帶了需要用到的spring的jar包 2、新建一個web項目

mybatis 整合spring之mapperLocations配置的問題

any 引入 location rop myba 路徑 通過 user configure 今天嘗試spring整合mybatis時遇到這麽一個問題,就是在配置sqlSessionFactory時是否要配置mapperLocations的問題。 <bean i

整合Spring框架和Hibernate框架

slf4j erl update rep java 監聽 session hiberna .cn -------------------siwuxie095 整合 Spring 框架和 Hibernate 框架

Shiro整合Spring

static actor rate utf-8 -i pen aso not exp 首先需要添加shiro的spring整合包。 要想在WEB應用中整合Spring和Shiro的話,首先需要添加一個由spring代理的過濾器如下: <!-- The filter-

(二)整合spring cloud雲服務架構 - particle雲架構

介紹 能夠 步驟 架構 第一篇 img .net 業務 服務架構 第一篇文章簡單給大家介紹了Spring Cloud架構,我這邊結合了當前大部分企業的通用需求,包括技術的選型比較嚴格、苛刻,不僅要用業界最流行的技術,還要和國際接軌,在未來的5~10年內不能out。作為公司

(一)整合spring cloud雲服務架構 - Spring Cloud簡介

springcloud 架構 雲服務 Spring Cloud是一系列框架的有序集合。利用Spring Boot的開發模式簡化了分布式系統基礎設施的開發,如服務發現、註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等(這裏只簡單的列了一部分),都可以用Spring Boot的開發風格做到一鍵啟動和部署

(三)整合spring cloud雲服務架構 - particle雲架構代碼結構構建

itl log lan 作用 購物 基本架構 集成 eight control 上一篇介紹了spring cloud雲服務架構的基本架構圖,本篇我們根據架構圖進行代碼的構建,根據微服務化設計思想,結合spring cloud本身的服務發現、治理、配置化管理、分布式等項目優秀

(四)整合spring cloud雲服務架構 - particle-common-framework代碼介紹

.cn server control 簡單的 阿裏巴巴 統計 icontrol htm 回顧 上一篇我們介紹了spring cloud雲服務架構 - particle雲架構代碼結構,簡單的按照幾個大的部分去構建代碼模塊,讓我們來回顧一下: 第一部分: 針對於普通服務的基礎

(六)整合spring cloud雲服務架構 - HongHu雲架構common-service代碼結構分析

如何 通過 -m 交互 art 實現 使用 sof 組織 當前的分布式微服務雲架構平臺使用Maven構建,所以common-service的通用服務按照maven構建獨立的系統服務,結構如下: particle-commonservice: spring cloud 系統