# mybatisSource **Repository Path**: zhlinger/mybatis-source ## Basic Information - **Project Name**: mybatisSource - **Description**: mybatis源码,用于调试学习 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2022-05-19 - **Last Updated**: 2022-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 概要 1. mybatis动态代理,核心源码部分已经实现,采用的是 Jdbc的动态代理。spring-mybatis只是封装了一个工厂类 `MapperFactoryBean`,它通过 工厂后置处理器,将所有的接口,设置为 `MapperFactoryBean`类的代理(猜测是为了用于单例隔离作用)。 实际**sql语句执行**的动态代理,是通过SqlSession完成的,具体的实现由mybatis内部完成。mapper与接口类的映射及处理,也是由mybatis源码完成。总结起来,spring-mybatis只是完成一个注册上下文bean的作用。 2. mybatis-springBoot,对mybatis-spring做了一个自动配置。 其中,主要包括 `SqlSessionFactoryBean`,该类实际上就已经完成了 `mybatis`的核心功能,包括xml文件的解析,mapper接口的动态代理实现。 此外,实现了 @MapperScan的功能,使得接口映射类可以开箱即用。 自动配置类位于: `AutoConfiguredMapperScannerRegistrar`中。 没加MapperScan的情况下,只能扫描 SpringBoot项目默认路径下的 接口。该接口主要是为了与spring容器的兼容使用的。 3. 查看 mybatis动态代理的实现,可以从 `MapperRegistry.knownMappers属性`, `MapperRegistry.getMapper()方法`,`MapperProxy类`,`MapperMethodInvoker类`入手分析。 4. 动态代理与spring的结合,可以关注 `MapperFactoryBean`类即可。