• Spring整合Mybatis原理简单分析


      <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <!-- 配置数据库表对应的java实体类 -->
            <property name="typeAliasesPackage" value="com.test.pojo" />
            <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
            <property name="mapperLocations" value="classpath:com/test/mapping/*.xml" />
        </bean>
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.test.dao" />
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        </bean>

    上面是一般项目中的配置,根据该配置分析

    1,获取SqlSessionFactory

    根据配置文件可以得出切入点

    public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> {}

    由于实现了FactoryBean的类,Spring创建bean的时候其实调用的是getObject()方法。该方法如下:

    继续查看afterPropertiesSet();方法

    最后调用buildSqlSessionFactory();创建了sqlSessionFactory

    其中代理类的产生代码片段如下

    对于每个mapper的xml文件,扫描完成后,以如下的格式被放到Configuration的mapperRegistry的knownMapper存储起来。

    存放的是key为dao接口的class,值为MapperProxyFactory,通过该类使用jdk动态代理生成对应class的代理类。

     Spring的bean与Mybatis的Mapper之间的映射 ---MapperFactoryBean与MapperScannerConfigurer

    MapperFactoryBean这个类的作用是:

    将传统Mybatis调用数据库的方式:

    xxxMapper mapper = sqlSession.getMapper(xxxMapper.class);

    变成

    xxxMapper mapper = context.getBean(“xxxMapper”);

    也就是将mybatis的对象由spring以bean的方式管理

    形成了一一对应关系,方便在service层直接注入使用。

    当mapper文件数量多的时候,使用MapperFactoryBean显得很繁琐,因此spring提供了org.mybatis.spring.mapper.MapperScannerConfigurer来批量的实现映射。

  • 相关阅读:
    拥塞避免
    计算机网络常考
    [CODEVS1014]装箱问题
    [CODEVS2055]集合划分
    [CODEVS3641]上帝选人
    [GRYZ2014]递增子序列最大和
    [GRYZ2014]最大连续子序列的和
    金矿模型看动归
    [CODEVS1220]数字三角形
    [CODEVS1294]全排列
  • 原文地址:https://www.cnblogs.com/ljdblog/p/7121492.html
Copyright © 2020-2023  润新知