整合Spring與Hiberante3方法總結打賞

最近做項目,第一次整合spring、hibernate、struts,這里收集點資料,做下參考。學j2ee的都知道,在Spring中整合Hibernate也算是需要掌握的基礎知識了,整合的過程比整合Struts相對來說要簡單許多,我們要實現的目標是整合,思路就是讓spring容器來管理SessionFactory,這樣就可以使用Spring的聲明式事務了。

在 Spring 中配置 SessionFactory,可以利用Spring提供的 LocalSessionFactoryBean 工廠 Bean, 聲明一個使用 XML 映射文件的 SessionFactory 實例。需要為該工廠 Bean 指定 configLocation 屬性來加載 Hibernate 配置文件。例如:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="hibernate.cfg.xml"></property>
</bean>

這樣就可以在Bean中注入SessionFactory了。但是SessionFactory需要注入一個DataSource才可以,所以還要聲明一個DateSource來進行注入,為了將數據庫的信息以及數據庫連接池的信息配置在配置文件里面,所以使用的<context:property-placeholder location="classpath:C3P0_config.properties" />,所以如下代碼:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${user}" />
<property name="password" value="${password}" />
<property name="jdbcUrl" value="${jdbcUrl}" />
<property name="driverClass" value="${driverClass}" />
<property name="checkoutTimeout" value="${checkoutTimeout}" />
<property name="idleConnectionTestPeriod" value="${idleConnectionTestPeriod}" />
<property name="initialPoolSize" value="${initialPoolSize}" />
<property name="maxIdleTime" value="${maxIdleTime}" />
<property name="maxPoolSize" value="${maxPoolSize}" />
<property name="minPoolSize" value="${minPoolSize}" />
<property name="maxStatements" value="${maxStatements}" />
</bean>

其中的這些${}中的變量是在C3P0_config.properties屬性文件中定義的,如下所示:
user=root
password=root
jdbcUrl=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver
checkoutTimeout=30000
idleConnectionTestPeriod=30
initialPoolSize=10
maxIdleTime=30
maxPoolSize=100
minPoolSize=10
maxStatements=200
這樣就可以把dataSource注入給這個sessionFactory了,這樣再進行測試的時候就可以成功了,這里只是將基本的整合做好了,但是要實現聲明式事務必須還要進行如下的配置:
配置事務管理器:

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

接下來就是如何來配置聲明式事務了。

<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes><tx:method name="savePerson"/> </tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression_r="execution(* cn.itcast.spring.hibernate.*.*(..))" id="hibernatepointcut"/>
<aop:advisor advice-ref="transactionAdvice" pointcut-ref="hibernatepointcut"/>
</aop:config>

配置好了這些就可以進行數據庫的查詢和修改操作了,因為這時候就開啟了事務,事務的開啟不是我們做的,是Spring的幫我們做的,這就是Spring的聲明式事務的魅力,為了減少配置文件的存在,我們可以將Hibernate的配置文件中的信息拿到Spring的配置文件中來。比如我們可以把映射文件的路徑信息拿到這里面來 如下:

<property name="mappingResources" >
<list> <value>cn/itcast/spring/hibernate/Person.hbm.xml</value>
</list>
</property>

將這個放在SessionFactory的屬性中進行注入進來,顯然這時候Hibernate的配置文件的分量又減輕了,還有一些基本的信息就是關于Hibernate的基本的屬性信息,也可以加進來

<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>
</props>
</property>

這時候就可以完全的舍棄Hiberante的配置文件了,因此我們的Hibernate也就和Spring整合的完成了。基本上就是這些,還有就是關于使用注解的方式來進行整合,當然那種方式整合起來更簡單,因此具體的整合思路是一致的,所以我就不再重復了。

整合Spring與Hiberante3方法總結
文章《整合Spring與Hiberante3方法總結》二維碼
  • 微信打賞
  • 支付寶打賞

已有1條評論

  1. 石家莊婚紗攝影

    對這個不太懂啊

    2012-05-11 09:15 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖