博客
关于我
SpringBoot-Mybatis 源码解析
阅读量:796 次
发布时间:2023-03-28

本文共 1819 字,大约阅读时间需要 6 分钟。

SpringBoot与MyBatis相互配合的加载原理及实现机制

SpringBoot与MyBatis的协同工作原理

在SpringBoot应用中,MyBatis的加载与初始化过程主要通过以下几个关键步骤完成:

  • Bean的加载过程

    • 加载:Spring扫描所有标有注解的类。
    • 注册:将发现的Bean注册到BeanDefinitionMap中。
    • 实例化:IOC容器完成Bean的实例化。
  • MyBatis Bean的注册

    • MyBatis的Bean通常需要通过BeanFactoryPostProcessorBeanDefinitionRegistryPostProcessor来注册。
    • 这些PostProcessor在Spring初始化过程中会被调用,负责将MyBatis相关Bean注册到Spring的BeanDefinitionMap中。
  • Spring初始化MyBatis入口

    在Spring的AbstractApplicationContext中,refresh()方法负责刷新应用上下文,具体流程如下:

  • prepareRefresh():准备上下文进行刷新。
  • obtainFreshBeanFactory():获取新的BeanFactory实例。
  • prepareBeanFactory(beanFactory):准备BeanFactory,准备好后续的处理。
  • postProcessBeanFactory(beanFactory):调用所有BeanFactoryPostProcessor。
  • invokeBeanFactoryPostProcessors(beanFactory):调用所有相关的PostProcessor。
  • registerBeanPostProcessors(beanFactory):注册处理Bean创建的PostProcessor。
  • finishBeanFactoryInitialization(beanFactory):完成BeanFactory的初始化工作。
  • invokeBeanFactoryPostProcessors方法中,主要处理包括:

    • 调用BeanDefinitionRegistryPostProcessor,用于处理BeanDefinition注册。
    • 调用BeanFactoryPostProcessor,用于处理Bean的后置处理。

    MyBatis源码实现

    MyBatis的初始化主要通过以下步骤完成:

  • SqlSessionFactoryBuilder:负责构建SqlSessionFactory。
  • DefaultSqlSessionFactory:创建SqlSessionFactory实例。
  • SqlSessionTemplate:创建SqlSessionTemplate实例,负责管理SqlSession。
  • SqlSessionTemplate中,通过动态代理创建SqlSession实例,核心逻辑在MapperProxy中实现。

    MyBatis中的缓存机制

    一级缓存(方法缓存)

    • 默认启用,无法关闭。
    • 缓存范围:同一个SqlSession中,相同的查询方法。
    • 缓存机制:通过methodCache来实现,查询结果会存入缓存,下次直接取用。

    二级缓存(mapper缓存)

    • 可配置,默认关闭。
    • 缓存范围:同一Mapper接口定义的命名空间,基于MapperID和参数进行缓存。
    • 实现:通过CacheExecutor来管理,查询结果会存入二级缓存,跨SqlSession共享。

    常见问题解答

    MyBatis的缓存机制

    • 一级缓存:存储在methodCache中,适用于同一个SqlSession内的重复查询。
    • 二级缓存:存储在mapperCache中,适用于跨SqlSession的查询,基于Mapper接口定义的命名空间。

    MyBatis中的$#符号

    • $:用于参数占位符,支持动态参数赋值,不会转义。
    • #:用于参数占位符,支持动态参数赋值,且会对参数进行转义处理。

    MyBatis中的resultMapresultType

    • resultMap:用于将多个结果字段映射到不同的POJO对象。
    • resultType:用于指定结果对象的类型,适用于单个结果对象的映射。

    通过以上机制,SpringBoot与MyBatis实现了高效的数据库操作和缓存管理,充分发挥了ORM工具的优势。

    转载地址:http://vchfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现多尺度MSR算法(附完整源码)
    查看>>
    Objective-C实现多种方法求解定积分(附完整源码)
    查看>>
    Objective-C实现多组输入(附完整源码)
    查看>>
    Objective-C实现多项式函数在某个点的评估算法(附完整源码)
    查看>>
    Objective-C实现多项式哈希算法(附完整源码)
    查看>>
    Objective-C实现大位数乘法(附完整源码)
    查看>>
    Objective-C实现大根堆(附完整源码)
    查看>>
    Objective-C实现奇偶检验码(附完整源码)
    查看>>
    Objective-C实现奇偶转置排序算法(附完整源码)
    查看>>
    Objective-C实现奇异值分解SVD(附完整源码)
    查看>>
    Objective-C实现子集总和算法(附完整源码)
    查看>>
    Objective-C实现字符串autocomplete using trie(使用 trie 自动完成)算法(附完整源码)
    查看>>
    Objective-C实现字符串boyer moore search博耶摩尔搜索算法(附完整源码)
    查看>>
    Objective-C实现字符串IP地址转DWORD地址(附完整源码)
    查看>>
    Objective-C实现字符串jaro winkler算法(附完整源码)
    查看>>
    Objective-C实现字符串manacher马拉车算法(附完整源码)
    查看>>
    Objective-C实现字符串wildcard pattern matching通配符模式匹配算法(附完整源码)
    查看>>
    Objective-C实现字符串word patterns单词模式算法(附完整源码)
    查看>>
    Objective-C实现字符串Z 函数或 Z 算法(附完整源码)
    查看>>
    Objective-C实现字符串加解密(附完整源码)
    查看>>