zoukankan      html  css  js  c++  java
  • 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来批量的实现映射。

  • 相关阅读:
    CF754A
    快速幂模板
    循环-21. 求交错序列前N项和(15)
    循环-20. 猜数字游戏(15)
    循环-19. 币值转换
    循环-18. 龟兔赛跑(20)
    循环-17. 简单计算器(20)
    循环-11. 水仙花数(20)
    IO 分支 循环
    check list
  • 原文地址:https://www.cnblogs.com/ljdblog/p/7121492.html
Copyright © 2011-2022 走看看