spring和myBatis整合

整合思想:
myBatis的角色:持久層框架;加載生成SqlSessionFactory會話工廠,特點:一旦創建運行期一直存在,設計爲單例模式。採用的mapper動態代理的方式。
spring角色:是一種容器,用來管理類的。並且可以設計scope爲單例的。spring是用來代理mapper接口的實現類,聲明爲springBean。
spring事務管理
spring的聲明式事務AOP技術
xml配置文件形式

<!-- 讀取外部資源文件 -->
<context:property-placeholder location="classpath:db.properties"/>

<!-- 1、配置數據庫連接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass" value="${jdbc.driver}"></property>
	<property name="jdbcUrl" value="${jdbc.url}"></property>
	<property name="user" value="${jdbc.username}"></property>
	<property name="password" value="${jdbc.password}"></property>
</bean>

<!--2、 配置會話工廠,讓spring來管理SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<!-- 注入數據源 -->
	<property name="dataSource" ref="dataSource"></property>
	<!-- 記載mybatis的全局配置文件 -->
	<!-- <property name="configLocation" value="classpath:mybatis.xml"></property>-->
	<!-- 起別名 -->
	<property name="typeAliasesPackage" value="com.hpe.pojo"></property>

</bean>

<!-- 3、spring來管理mapper代理Bean,使用包掃描的方式,批量創建mapper的代理Bean。
	bean的名字就是接口的名字,首字母小寫
 -->
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
 	<!-- 指定mapper接口所在的包路徑 -->
 	<property name="basePackage" value="com.hpe.mapper"></property>
 
 </bean>
 
 <!-- 開啓註解掃描 -->
 <context:component-scan base-package="com.hpe.service.*"></context:component-scan>

<!-- 4.1spring事務管理 -->
<!-- 事務管理器 spring的聲明式事務 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<!-- 注入數據源 -->
	<property name="dataSource" ref="dataSource"></property>
</bean>

<!-- 4.2事務的通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
	<tx:attributes>
		<!-- propagation="REQUIRED" 傳播行爲
			當前方法必須運行在一個事務中,如果當前沒有事務,則會開啓一個新的事務,如果沒有,則使用現在的事務
			propagation="SUPPORTS":當前方法在運行在事務中,則使用當前事務,如果當前沒有事務,則不使用事務
			
		-->
		<tx:method name="select*" propagation="SUPPORTS"/>
		<tx:method name="tran*" propagation="REQUIRED"/>
		<tx:method name="*"/>
	</tx:attributes>
</tx:advice>

<!-- 4.3AOP的事務開頭 -->
<aop:config>
	<!-- 切點 -->
	<aop:pointcut expression="execution(* com.hpe.service..*.*(..))" id="cut1"/>
	<!-- 通知 -->
	<aop:advisor advice-ref="txAdvice" pointcut-ref="cut1"/>
</aop:config>

註解事務管理

<!-- 開啓註解事務 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

@Transactional 可以註解到方法上,標識當前方法進行事務管理
註解到類上:表示當前類中的所有方法都進行事務管理
注意:spring的事務管理,一定要對進行事務管理的地方往外拋異常,而不能try-catch捕捉異常。
如果想主動對事務進行回滾,可以往外拋異常throw new RuntimeException();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章