zoukankan      html  css  js  c++  java
  • MyBatis 学习记录3 MapperMethod类

    主题

      之前学习了一下MapperProxy的生产过程,自定义Mapper类的对象是通过动态代理生产的,调用自定义方法的时候实际上是调用了MapperMethod的execute方法:mapperMethod.execute(sqlSession, args);所以想再简单学习记录下MapperMethod类

    组成

    从上图可知,MapperMethod只有2个成员域,都是静态内部类,所以

    MapperMethod ≈ SqlCommand + MethodSignature

     SqlCommand ≈ name + SqlCommandType,其中name是类似于test.mapper.UserMapper.selectByPrimaryKey的字符串相当于是标识这个MapperMethod是哪个自定义方法对应的MapperMethod

    SqlCommandType是个枚举

    从上图中就可以明白就是对应于你在XML文件中写的标签,是select标签还是update标签还是其他.标识这个SQL是那种DML

    MethodSignature ≈ java.lang.reflect.Method的封装,会记录你自定义的方法的一些信息,比如返回值是集合还是单个对象还是Void? 方法参数是否有命名参数(@Param)?等等

    查询时

    从之前的学习中我已经知道MapperProxy是Mapper的动态代理实现,他的invoke方法会调用MapperMethod的execute方法.所以我们来看看这个execute方法

    从图中我们就知道了为啥MapperMethod需要SqlCommond和MethodSignature这2个成员域了.

    根据SqlCommond的类型,比如insert,还是update来决定调用sqlSession的insert还是update等方法

    根据方法的返回类型,还决定是要掉selectOne还是selectList等.

    最终都是用SqlSession的对应方法来查询的,所以不管你在自定义Mapper中写什么方法.最终都会转到SqlSession的对应方法.

    中途还有一些参数的包装,比如把你自定义方法的多个参数放到一个map里,或者收集命名参数等等.

    小结

    MapperMethod这个类的作用就是把你自定义的Mapper里的方法和参数翻译成sqlSession里定义的那些selectOne呀selectMany等等方法.这样当调用你自定义的方法的时候MethodProxy就能够执行sqlSession对应的方法了.

    
    
    
  • 相关阅读:
    ant 软件包不存在报错
    在 Internet Explorer 中使用 Windows 窗体控件
    智能客户端
    Back to the Future with Smart Clients
    "Automation 服务器不能创建对象" 的解决方案
    Top 10 Reasons for Developers to Create Smart Clients
    Updater Application Block for .NET
    Smart Client Application Model and the .NET Framework 1.1
    Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients
    智能客户端技术总结(二)
  • 原文地址:https://www.cnblogs.com/abcwt112/p/9715316.html
Copyright © 2011-2022 走看看