提前说明:
整合目的:使mybatis支持事务代理
需要做的工作:
1、将mybatis对象的创建交由spring
①配置第三方带有连接池的数据源
②spring创建sqlsession对象
③mybatis通过映射接口创建对象,spring不支持通过接口创建对象,需要给出解决方案(在整合包)
2、配置事务
①配置事务管理器
②配置通知
③使用AOP切入
具体步骤:
1、配置数据源
<!-- 配置数据源 -->
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="jdbc:mysql://localhost:3306/sms"></property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="username" value="root"></property>
<property name="password" value="1234"></property>
</bean>
2、配置会话工厂,用于创建sqlsession
说明,只要配置了会话工厂,即可获得sqlsession对象(看源码)
<!--配置会话工厂 -->
<bean name="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源,用于创建sqlsession -->
<property name="dataSource" ref="dataSource"></property>
</bean>
3、配置映射接口扫描包,创建mapper对象
<!-- 配置映射接口扫描包,用于创建mapper对象 -->
<bean name="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="my"></property>
<!--指定会话工厂-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
</bean>
4、配置事务管理器
<!-- 配置事务管理器 -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
5、配置通知
<!-- 配置通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="select*" read-only="true" />
<tx:method name="find*" read-only="true"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="query*" read-only="true"/>
<tx:method name="*" read-only="false"/>
</tx:attributes>
</tx:advice>
6、AOP切入
<!--AOP切入 -->
<aop:config>
<!--切入点 -->
<aop:pointcut expression="execution(* my.service..*.*(..))" id="pc"/>
<!-- 配置切面 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc" />
</aop:config>