mybatis原理之MapperMethod实现
来源:互联网 发布:excel求和数据复制 编辑:程序博客网 时间:2024/06/06 08:28
MapperMethod是Mybatis中具体的数据访问执行方法入口,当mapper方法被调用的时候对应的MapperProxy会生成相应的MapperMethod并且会缓存起来,这样当多次调用同一个mapper方法时候只会生成一个MapperMethod,提高了时间和内存效率。每一个MapperMethod对应了一个mapper文件中配置的一个sql语句或FLUSH配置,对应的sql语句通过mapper对应的class文件名+方法名从Configuration对象中获得。
当执行MapperMethod的execute方法的时候,根据当前MapperMethod对应的mapper配置会执行Session的insert, update, delete, select, selectList, selectMap, selectCursor, selectOne或flushStatements方法。 具体执行Session对象的哪个方法判定如下:
创建Session对象需要传递的参数逻辑如下:
public Object convertArgsToSqlCommandParam(Object[] args) { final int paramCount = params.size(); if (args == null || paramCount == 0) { return null; } else if (!hasNamedParameters && paramCount == 1) { return args[params.keySet().iterator().next()]; } else { final Map<String, Object> param = new ParamMap<Object>(); int i = 0; for (Map.Entry<Integer, String> entry : params.entrySet()) { param.put(entry.getValue(), args[entry.getKey()]); // issue #71, add param names as param1, param2...but ensure backward compatibility final String genericParamName = "param" + String.valueOf(i + 1); if (!param.containsKey(genericParamName)) { param.put(genericParamName, args[entry.getKey()]); } i++; } return param; }}
这里args是用户mapper所传递的方法参数列表, 如果方法没有参数,则返回null. 如果方法只包含一个参数并且不包含命名参数, 则返回传递的参数值。如果包含多个参数或包含命名参数,则返回包含名字和对应值的map对象
阅读全文
0 0
- mybatis原理之MapperMethod实现
- mybatis源码之MapperMethod
- Mybatis 之 MapperMethod
- MapperMethod
- mybatis原理之mapper实现
- 《深入理解mybatis原理(十一)》 Mybatis插件原理之实现细节
- 深入理解mybatis原理(十一) Mybatis插件原理之实现细节
- Mybatis-Spring实现原理
- mybatis实现原理
- Mybatis实现原理
- mybatis分页原理实现
- mybatis实现原理
- Mybatis之工作原理
- MyBatis 插件之拦截器(Interceptor)实现原理
- MyBatis源码剖析 - MyBatis 插件之拦截器(Interceptor)实现原理
- SSM 之《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- Mybatis之Mybatis框架原理(2)
- MyBatis Mapper接口实现原理
- 剖析Form表单的文件上传功能
- 数据库表基本操作
- gradle 修改java中的版本号
- ViewPager——RadioGroup结合引导页面
- 范数概念
- mybatis原理之MapperMethod实现
- Linux安装jdk
- 什么是爬电距离?宽爬电距离光耦为什么越来越受大家青睐?
- Kafka操作命令
- 阿里云CentOS 6.5下安装Mysql 5.6
- matplotlib入门之图像处理
- java-常量
- 为什么使用Kotlin?
- 自动化测试