【源码分析】MyBatis SQL 执行过程分析

文章未写完,有空补。。。

3、调用 MapperMethod 执行

接下来看 mapperMethod.execute() 方法,因为我们这里调试的是 SELECT 方法,因此会走到 SELECT 分支。

经过 if - else if 判断,最终会走到 returnMany 分支,因为我们返回的是 List。

下面调用 executeForMany() 执行“returnMany”的逻辑。

【源码分析】MyBatis SQL 执行过程分析

 

 

 

 

方法 executeForMany,调用 method.convertArgsToSqlCommondParam() 转换参数。注意:这个方法很重要

【源码分析】MyBatis SQL 执行过程分析

 

 

 

convertArgsToSqlCommandParams 方法调用 paramNameResolver.getNamedParams() 方法,以 args 作为传入参数。

【源码分析】MyBatis SQL 执行过程分析

 

 

 

方法 getNamedParams()。names 是方法参数的 Map<Integer, String>,key 为参数索引,value 为参数名,由于这里是单个参数,因此解析为 param。

1、判断传入的 args 是否为 null,或者是否没有参数

2、判断是否没有 @Param 注解,而且仅仅 1 个参数。如果满足,则取出 names 的第一个 key。因为我们 selectList 方法只有一个传入参数,因此满足分支,而且,这里 names.firstKey() 返回 0(key 是索引),通过索引从 args 数组中获取参数值。

【源码分析】MyBatis SQL 执行过程分析