MyBatis-Spring整合源码
2021-11-22 18:09:36 11 举报
MyBatis-Spring整合源码是Spring框架与MyBatis框架的完美结合,实现了自动扫描、自动注入和事务管理等功能。通过配置和注解,开发者可以轻松地将MyBatis集成到Spring项目中,实现数据访问层的解耦。同时,源码中还包含了许多实用的工具类和方法,如SqlSessionFactoryBean、MapperScannerConfigurer等,为开发者提供了便捷的开发体验。总之,MyBatis-Spring整合源码为开发者提供了一个高效、稳定、易用的数据访问解决方案。
作者其他创作
大纲/内容
SqlSessionDaoSupport#SqlSessionTemplate在注入 Bean 定义时设置 AutowireMode 为 AUTOWIRE_BY_TYPE
SqlSessionFactory#openSession基本上获取的是DefaultSqlSessionFactory
ClassPathMapperScanner#processBeanDefinitions修改 Spring 的 Bean 定义,mapper 接口类型为MapperFactoryBean。并设置 AutowireMode 为 BYTYPE
SqlSessionUtils#registerSessionHolder把 session 绑定到事务线程变量
MapperFactoryBean#checkDaoConfig
MapperMethod#execute所有 mappper 都执行这个方法
MapperRegistry#getMapper
spring 加载获取 Bean 时,即 getBean 时
SqlSessionDaoSupport#setSqlSessionFactory在初始化时调用
通过FactoryBean#getObject获取实际对象MapperFactoryBean#getObject
SqlSessionUtils#sessionHolder获取 sqlSession
Configuration#addMapper
MapperScannerConfigurer创建BeanDefinition,并把注解的属性设置进去
没有找到 session
MapperScannerConfigurer#postProcessBeanDefinitionRegistry在 spring 加载完所有 bean 定义时调用
@MapperScan
SqlSessionFactoryBean核心配置
返回DefaultSqlSessionFactory
SqlSessionUtils#getSqlSession
DefaultSqlSession基本上返回的都是这个
SqlSessionDaoSupport#createSqlSessionTemplate
TransactionSynchronizationManager#getResource通过 Spring事务同步管理器获取SqlSessionHolder
MapperRegistry#addMapper解析 mapper 并保存到全局配置
MapperScannerRegistrar#registerBeanDefinitions会在 spring 处理Configuration时调用
SqlSessionTemplate#getMapper
SqlSessionFactoryBuilder#build
MapperProxy#cachedMapperMethod
DaoSupport#afterPropertiesSet在 Bean 初始化时调用
@Import
SqlSessionInterceptor#invoke实际执行方法
.MapperAnnotationBuilder#parseStatement解析@Options@SelectKey@ResultMap等注解
MapperProxy#invoke
通过SqlSessionTemplate的构造方法使用 Java 动态代理生成一个SqlSession 代理
ClassPathMapperScanner#doScan扫描我们配置的包
SqlSessionFactoryBean#afterPropertiesSet在 Spring 创建 bean 是调用
Configuration#getMapper
XMLMapperBuilder#parse解析mapper.xml文件,并保存到全局配置
MapperProxyFactory#newInstance通过动态代理生成
Configuration#getMappedStatementmapper 都解析成MappedStatement,可以通过全限定名获取
MapperAnnotationBuilder#parse
0 条评论
下一页