xml整合第三方框架有两种整合方案:
- 不需要自定义名空间,不需要使用Spring的配置文件配置第三方框架本身内容,例如: MyBatis; 
- 需要引入第三方框架命名空间,需要使用Spring的配置文件配置第三方框架本身内容,例如: Dubbo. 
1 整合MyBatis
Spring整合MyBatis的步骤如下
- 导入MyBatis整合Spring的相关坐标; 
- 编写Mapper和Mapper.xml; 
- 配置SqlSessionFactoryBean和MapperScannerConfigurer; 
- 编写测试代码 
创建一个简单的数据库方便测试,数据如下:
 
   创建pojo
public class User {
    private int id;
    private String username;
    private String password;
    public void setId(int id) {
        this.id = id;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
创建mapper
public interface UserMapper {
    /**
     *
     * @return
     */
    List<User> findAll();
}创建mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.msf.mapper.UserMapper">
    <select id="findAll" resultType="cn.msf.pojo.User">
        select * from tb_user
    </select>
</mapper>spring的xml文件
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
      <property name="username" value="xxxx"></property>
      <property name="password" value="xxxx"></property>
      <property name="url" value="jdbc:mysql://localhost:3307/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"></property>
   </bean>
   <!--配置SqlSessionFactoryBean,将SqlSessionFactoryBean放到容器-->
   <bean class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource"></property>
   </bean>
   <!--MapperScannerConfigurer,扫描指定的包将mapper对象放到容器-->
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="basePackage" value="cn.msf.mapper"></property>
   </bean>
   <bean id="userService" class="cn.msf.service.impl.UserServiceImpl">
      <property name="userDao" ref="userDao"></property>
      <property name="userMapper" ref="userMapper"></property>
<!--      <property name="username" value="msf"></property>-->
   </bean>测试代码:
 
   原理:
我们在spring的xml文件中注入了一个SqlSessionFactoryBean和一个扫描mapper的 MapperScannerConfigurer,SqlSessionFactoryBean一旦被实例化,就开始扫描mapper病痛动态代理产生Mapper的实现类存储到Spring容器中。
- SglSessionFactoryBean: 需要进行配置,用于提供SqlSessionFactory; 
- MapperScannerConfigurer: 需要进行配置,用于扫描指定mapper注册成BeanDefinition; 
- ClassPathMapperScanner: definitionsetAutowireMode(2) 修改了自动注入状态,所以MapperFactoryBean中的setSqlSessionFactory会自动注入进去。 
- MapperFactoryBean: Mapper的FactoryBean,获得指定Mapper时调用getObject方法 
- 最终调用sqlsession.getmapper方法。 



















