为什么需要SpringMVC整合Mybatis?
答:因为我们希望Mybatis可以使用Spring框架里面的事务代理机制。
配置文件
第一步:配置数据源
第二步:获得会话工厂
第三步:获得操作对象,并且注入到Spring容器里面
第四步;配置事务代理
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- 1.配置数据源 -->
<bean name="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<!-- 四要素 -->
<property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/sms" />
<property name="username" value="root" />
<property name="password" value="123456" />
</bean>
<!-- 2.配置会话工厂 -->
<!-- 默认情况下:mybatis是不支持spring的数据源的 -->
<!-- 问题:那么我们如何可以让mybatis支持spring的数据源呢? -->
<!-- 答:需要一个整合包 mybatis-spirng.jar
SqlSessionFactoryBean:作用就是让Mybatis可以通过Spring的数据源创建会话工厂的
-->
<bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 加载映射文件的路径 -->
<property name="mapperLocations" value="classpath:Mapper.xml"></property>
</bean>
<!-- 3.配置扫描器,将映射接口的动态对象创建,并且注入到spring容器里面 -->
<!-- 默认情况下:spring是不支持通过接口创建对象!!而Mybatis就是通过接口创建对象的
问题:Spring必须要实现类创建可以注入到容器,而Mybatis就是使用接口创建动态对象的。不能兼容Spring的要求。怎么办呢?
答:整合包提供了一个映射接口扫描器,用于通过映射接口创建了对象,并且可以创建的对象注入到容器里面
-根据表述扫描器必要要的两个条件
1.需要会话工厂
2.必须要指定映射接口的路径
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<property name="basePackage" value="cn.xxx.mapper"></property>
<!-- 指定扫描注解 -->
<property name="annotationClass" value="org.apache.ibatis.annotations.Mapper"></property>
</bean>
<!-- 4.配置事务代理,编程式事务 -->
<!-- 注意:Mybatis是的spring jdbc的事务代理 -->
<!-- 创建事务代理对象 -->
<bean name="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 指定数据源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 启动事务代理 -->
<tx:annotation-driven/>
</beans>