• mybatis的简单执行流程-面试用


    1、Configuration

    XMLConfigBuilder调用parse()方法解析Mybatis配置文件,生成Configuration对象
    XMLConfigBuilder parser > Configuration

    SqlSessionFactory = new DefaultSqlSessionFactory ( config );
    session = factory.openSession();
    sqlSession.getMapper(UserMapper.class);

    通过Session来得到UserMapper.java类的代理对象
    每一个Mapper文件都有一个对应的MapperProxyFactory,为什么需要MapperProxyFactory

    2、因为MapperProxyFactory可以用来生成代理对象。

    MapperProxyFactory是如何产生代理对象: 内部通过目标类转成MapperProxy,在通过Proxy生成代理对象。
    MapperProxy实现了InvocationHandler接口,所以MapperProxy具有拦截功能,

    Proxy如何产生对象的

    Proxy.newProxyInstance(getClassLoader(), new Class[]{this.mapperInterface}, mapperProxy);

    注意第一个参数是类加载器,第二个是代理要实现的接口,第三个参数是InvocationHandler的实例对象。

    Proxy把MapperProxy当做InvocationHandler,Mapper当做接口来生成代理类。最终代理类会实现UserMapper接口,并且被调用时,会被InvocationHandler拦截也就是被MapperProxy拦截。

    当调用方法,会被MapperProxy的invoke方法拦截,invoke会做下面操作

    通过方法名Method查询得到MapperMethodInvoker对象,MapperMethodInvoker是做什么

    3、MapperMethod

    MapperMethod主要包含下面2个东西

    private final MapperMethod.SqlCommand command;
    private final MapperMethod.MethodSignature method;
    
    public MapperMethod(Class<?> mapperInterface, Method method, Configuration config) {
        this.command = new MapperMethod.SqlCommand(config, mapperInterface, method);
        this.method = new MapperMethod.MethodSignature(config, mapperInterface, method);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    SqlCommand和MethodSignature干嘛用的。
    1、SqlCommand一个内部类 封装了SQL标签的类型insert update delete select
    2、MethodSignature一个内部类 封装了方法的参数信息 返回类型信息等

    MapperMethod有个execute,就是开始执行sql的操作.在execute里面,通过类型找到事insert还是update,在通过返回值类型找具体方法,处理类型
    在通过类+方法名当做ID去Mapper.xml里面找对应的sql执行语句。

    关于MapperMethod可以看这个文章:《MapperMethod》

  • 相关阅读:
    php 对比两个数组结构是否一致
    YoloV8改进策略:动态蛇形卷积,解决管状结构问题
    nodejs+vue+elementui毕业设计论文选题过程管理系统
    通过S3协议实现通用的文件存储服务中间件
    Android显示系统详解
    Docker构建Springboot项目,并发布测试
    【Linux】进程与服务
    ​​2年测试媛分享|女生到底适不适合做软件测试?优势在哪里?
    关于信息安全软考的记录5
    vulnhub靶场之Beelzebub
  • 原文地址:https://blog.csdn.net/weixin_37862824/article/details/133923791