66.Spring是如何整合MyBatis将Mapper接口注册为Bean的原理?

原理

    1. 首先MyBatis的Mapper接口核心是JDK动态代理
    1. Spring会排除接口,无法注册到IOC容器中
    1. MyBatis 实现了BeanDefinitionRegistryPostProcessor 可以动态注册BeanDefinition
    1. 需要自定义扫描器(继承Spring内部扫描器ClassPathBeanDefinitionScanner ) 重写排除接口的方(isCandidateComponent)
    1. 但是接口虽然注册成了BeanDefinition但是无法实例化Bean 因为接口无法实例化
    1. 需要将BeanDefinition的BeanClass 替换成JDK动态代理的实例(偷天换日)
    1. Mybatis 通过FactoryBean的工厂方法设计模式可以自由控制Bean的实例化过程,可以在getObject方法中创建JDK动态代理

额外扩展

MyBatis 本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

总之,Mybatis对JDBC访问数据库的过程进行了封装,简化了JDBC代码,解决JDBC将结果集封装为Java对象的麻烦。

下图是MyBatis架构图:
在这里插入图片描述
(1)mybatis-config.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂

(2)基于SqlSessionFactory可以生成SqlSession对象

(3)SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。

(4)Executor是SqlSession底层的对象,用于执行SQL语句

(5)MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)

相关推荐

  1. spring boot 中动态注册mybatis mapper

    2024-01-26 08:42:03       56 阅读
  2. 26、Spring如何解决Bean循环依赖?

    2024-01-26 08:42:03       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-26 08:42:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-26 08:42:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-26 08:42:03       82 阅读
  4. Python语言-面向对象

    2024-01-26 08:42:03       91 阅读

热门阅读

  1. BERT-文本分类&NER

    2024-01-26 08:42:03       59 阅读
  2. 低代码开发业务在AIGC时代的应用

    2024-01-26 08:42:03       59 阅读
  3. 第十一章认识Ajax(二)

    2024-01-26 08:42:03       44 阅读
  4. 智慧零售的趋势:零售业的未来

    2024-01-26 08:42:03       49 阅读
  5. mysql备份

    2024-01-26 08:42:03       47 阅读
  6. Acwing---786. 第k个数

    2024-01-26 08:42:03       55 阅读
  7. Flask 之旅 (一)

    2024-01-26 08:42:03       47 阅读
  8. python的Flask生产环境部署说明照做成功

    2024-01-26 08:42:03       44 阅读