• mybatis源码(2)--------以注解方式实现对于数据的操作流程(与spring结合使用)


    上一篇介绍了xml配置方式使用mybatis,这里将会介绍以注解方式使用mybatis

     mybatis在spring中的配置书写,注意到这里的datasource为spring jdbc的dataSource,此处也可以配置成为其它如何driud,c3p0等等数据库连接池。

     

     如图所示为核心的操作注解方式使用mybatis文件,完成对于配置类的加载,对于mapper解析之后创建对应的代理对象放入到ioc容器中。

     

    此方法会创建一个扫描器后续将会用到,同时将配置类的beandefinition放入bean,可以看到这里的registry为AnnotationConfigApplicationContext即为一个容器对象,之后会将配置的beandefinition信息注入到GenericApplicationContext这个容器对象中

    beanFactory属性的beandefinitionMap中,在之后refresh()将会获取到这个beanFactory对其内部的beanDefinitionMap进行解析操作。

     

    此方法会对于mapper的beanDefintion生成相关的beanDeifnition对象的一些属性进行设置操作。

     这里的为ioc容器的重要方法refresh方法,前面都是前戏操作,主要到invokeBeanFactoryPostProcessors方法,此方法完成对于配置类上面的注解相关做一些解析操作,并扫描mapper接口相关生成对应的beanDefinition对象并放入到beanDefinitionMap中。

     

     此方法完成MyBatis配置类相关的解析操作,获取mapper的扫描路径。

     将会走到核心扫描处理类,实现对于mybatis相关注解的一些提取并解析的相关操作

    扫描对应包下的接口,之后创建beanDefinition对象,为之后实例代理对象做准备操作

    此处会对扫描生成的beanDefintion对象进行对应的实例化操作,同时也会将每一个mapper代理对象必须的属性sqlSessionFactory设置进入去,完成整个mapper代理对象的创建工作。

    通过beanFactory方式结合mybatis创建代理对象,使用的是jdk动态代理,这里使用的代理方法和aop实现的有点区别,aop没有beanFactory相关的操作,同时aop支持cglib的方式

    (附加信息)

    如上图这是aop代理对象创建的常规入口,详细aop实现原理请看aop相关源码。

     之后将会走到这里的方法使用jdk动态代理创建mapper相关的代理对象。finishBeanFactoryInitializztion方法会进行相关mapper接口解析操作,包括接口上的注解解析操作,代理对象的创建,以及二级缓存的创建操作操作,完成整体的mapper代理对象的实例化操作。

    之后用户可以拿到对应的mapper代理对象对于数据库进行相应的操作,至于此处的bean创建操作,请看spring源码相关bean定义与ioc等相关。

    附加信息关于mybatis中事务处理,mybatis中事务处理与所使用数据库连接池有关,具体使用如下图所示,通常使用的是spring事务来进行事务的处理工作。

    -----------------------------------------到此mybatis注解方式使用解析

  • 相关阅读:
    CSS 文本
    javascript:void(0)的问题
    剑指offer
    牛课--C/C++
    Linux学习--第二波
    面经-csdn
    初学Linux
    二分查找法的实现和应用汇总
    vs2013下git的使用
    win10+vs2013+Qt5.4 安装方法
  • 原文地址:https://www.cnblogs.com/chaojibaidu/p/14984470.html
Copyright © 2020-2023  润新知