Spring+SpringMVC+Hibernate整合

SpringMVC与Spring的整合无非就是在Spring的基础上增加了SpringMVC的配置xxx-servlet.xml

Hibernate与Spring的整合无非就是将通过hibernate.cfg.xml获得的SessionFactory交给SpringIOC管理

 

Spring单与hibernate整合时:

以下配置了JdbcTemplate和hibernateTemplate交由统一事务管理器管理事务

<context:property-placeholder location="classpath:*db.properties"  ignore-unresolvable="true" ignore-resource-not-found="false"/>
	
	<!-- 数据库连接 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${driver.name}"></property>
		<property name="url" value="${db.url}"></property>
		<property name="username" value="${db.username}"></property>
		<property name="password" value="${db.password}"></property>
		 <!--initialSize: 初始化连接-->    
        <property name="initialSize" value="5"/> 
         <!--maxIdle: 最大空闲连接-->    
        <property name="maxIdle" value="20"/>
        <!--minIdle: 最小空闲连接-->    
        <property name="minIdle" value="5"/> 
        <!--maxActive: 最大连接数量-->    
        <property name="maxActive" value="200"/>
        <!--maxWait: 超时等待时间以毫秒为单位 1000等于60秒-->  
        <property name="maxWait" value="3000"/>
	</bean>

	<!-- 配置SessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="hibernateProperties" >
			<props >
				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">true</prop>
				<prop key="hibernate.connection.release_mode">after_transaction</prop>
			</props>
		</property>
		<property name="namingStrategy">
			<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
		</property>
		<!-- 扫描映射关系类 -->
		<property name="packagesToScan" value="com.muchen.*"></property>
	</bean>

    <!-- 配置jdbcTemplate -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

    <!-- 配置hibernateTemplate -->
	<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <!-- 将jdbcTemplate和hibernateTemplate 交给同一个事务管理器管理,达到同时提交和同时回滚的目的 -->
		<property name="sessionFactory" ref="sessionFactory"></property>
		<property name="dataSource" ref="dataSource"></property>
	</bean>
        <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

当整合了MVC时,在Spring的配置文件ApplicationContext.xml和MVC的配置文件xxx-servlet.xml中都会有

<context:component-scan base-package="com.muchen">

在启动IOC时扫描了一次,然后发起请求初始化DispatchServlet时又扫描了一次,后面一次的扫描会覆盖之前一次的扫描,而且xxx-servlet.xml中的扫描组件是没有配置事务的,所以在多次重复扫描组件时可能导致事务无效。

为了避免此类情况出现,配置文件应做如下修改:在IOC配置中

<context:component-scan base-package="com.muchen">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

也就是扫描除了Controller的其他组件,其实也可以连Controller一起扫,只不过为了避免MVC配置里重复扫描Controller。


在xxx-servlet.xml配置:只扫描Controller就行了,理论上只要不扫入含有事务的组件就行了

<context:component-scan base-package="com.muchen" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

use-default-filters:是否自动检测带有@Component、@Repository、@Service或@Controller的类。默认设置是“true”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值