主题

  之前学习了一下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对应的方法了.

												

MyBatis 学习记录3 MapperMethod类的更多相关文章

  1. MyBatis 学习记录5 MyBatis的二级缓存

    主题 之前学习了一下MyBatis的一级缓存,主要涉及到BaseExecutor这个类. 现在准备学习记录下MyBatis二级缓存. 配置二级缓存与初始化发生的事情 首先二级缓存默认是不开启的,需要自 ...

  2. MyBatis 学习记录7 一个Bug引发的思考

    主题 这次学习MyBatis的主题我想记录一个使用起来可能会遇到,但是没有经验的话很不好解决的BUG,在特定情况下很容易发生. 异常 java.lang.IllegalArgumentExceptio ...

  3. MyBatis 学习记录4 MyBatis的一级缓存

    主题 分享记录一下MyBatis的一级缓存相关的学习. Demo public static void firstLevelCache() { init("mybatis-config.xm ...

  4. mybatis 学习记录1

    起因 以前刚学习java三大框架的时候持久层框架我是自学的是hibernate..感觉蛮好用的,so easy..后来大三实习公司用的是jpa(hibernate外包装一层)...再后来工作1年多用的 ...

  5. mybatis学习记录六——一对一、一对多和多对多查询

    9       订单商品数据模型 9.1     数据模型分析思路 1.每张表记录的数据内容 分模块对每张表记录的内容进行熟悉,相当 于你学习系统 需求(功能)的过程. 2.每张表重要的字段设置 非空 ...

  6. Mybatis学习记录(六)----Mybatis的高级映射

    1.一对多查询 1.1 需求 查询订单及订单明细的信息. 1.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders. ...

  7. MyBatis 学习记录6 TypeHandler

    主题 因为对MyBatis在JDBC数据和Java对象之间数据转化比较感兴趣,所以就记录并学习一下TypeHandler. 使用场景 如上图所示,观察下接口方法就能明白.TypeHandler主要用于 ...

  8. MyBatis 学习记录2 Mapper对象是如何生成的

    主题 以前我一直有一个问题不懂.并且觉得很神奇.就是Mybatis我们开发的时候只需要定义接口,并没有写实现类,为什么我们运行的时候就可以直接使用? 现在我想分享下这部分大致是怎么实现的. 在启动的时 ...

  9. mybatis学习记录三——SqlMapConfig.xml相关参数详解

      5       SqlMapConfig.xml mybatis的全局配置文件SqlMapConfig.xml,配置内容如下: properties(属性) settings(全局配置参数) ty ...

随机推荐

  1. 一些Fibonacci数列的神奇性质【数学】

    递推式: \(f_i=1 (1\leq i\leq 2)\) \(f_i=f_{i-1}+f_{i-2}(i>2)\) 一些性质 \(\sum_{i=1}^n f_i=f_{n+2}-1\) \ ...

  2. 深入了解 WPF Dispatcher 的工作原理(PushFrame 部分)

    在上一篇文章 深入了解 WPF Dispatcher 的工作原理(Invoke/InvokeAsync 部分) 中我们发现 Dispatcher.Invoke 方法内部是靠 Dispatcher.Pu ...

  3. Ubuntu搭建 Apache、MySQL、PHP环境

    以Ubuntu 16.04为例: 1.安装MysSQL 打开命令行输入 :sudo apt-get install mysql-server 输入管理员密码 选择Y 在安装的中间会出现输入Mysql的 ...

  4. Kubernetes基本概念

    Kubernete模型中的核心概念.这些核心概念反映了Kubernetes设计过程中对应用容器集群的认知模型. 集群组件,从架构上看,Kubernetes集群(Cluster)也采用了典型的“主-从” ...

  5. VS2010 无法启动程序,系统找不到指定的文件

    1>------ 已启动生成: 项目: work, 配置: Debug Win32 ------1>生成启动时间为 2018/1/9 14:01:16 下午.1>Initialize ...

  6. Mac环境下PHPstorm配置xdebug开发调试web程序

    一.安装PHP的xdebug扩展 安装xdebug(技巧,为了找到适配的版本,让xdebug网站根据phpinfo()函数输出分析找到对应的方法及安装步骤:如果安装了多个PHP版本的话,尽量用phpi ...

  7. jeecg选择按钮带入其他单据值

    前端的标签 <input class="inputxt" id="fshimian" name="fshimian" ignore=& ...

  8. composer包php-amqplib

    php-amqplib官方文档 url:http://www.rabbitmq.com/tutorials/tutorial-one-php.html #测试demo: url: http://**. ...

  9. znpc改版前后网址修改办法

    znpc改版前后网址修改办法把原网址中的http://bbs.znpc.net/viewthread.php?替换为http://bbs.znpc.net/forum.php?mod=viewthre ...

  10. [C++]复制构造函数、赋值操作符与隐式类类型转换

    问题:现有类A定义如下: class A{public:        A(int a)                            //构造函数        {              ...