MapperProxy
1.首先构建并且缓存MapperMethod,调用cachedMapperMethod: 先从缓存中获取,如果没有就新建一个mapperMethod,然后放入到缓存methodCache中。
2.构建好method后,就调用execute方法执行
3.执行类型分成insert,把参数转化成为sql命令的参数,执行插入insert,返回影响行数的结果
4.update,delete的执行同理
5.select的执行比较复杂,如下图
5.1 执行查询返回void结果
5.2 执行查询返回多个返回值
5.3 执行查询返回map
5.4 执行查询返回cursor游标
5.5 执行查询返回单个返回值
6.具体执行开始,如下
7.将参数转换为sql命令的参数,调用sqlSession.select执行
8.继续调用执行
9.根据boundsql等入参,获取cacheKey,然后可以从缓存cache中直接获取查询结果list
9.根据参数paramObject,解析参数获取boundSql
10. 根据动态标签的不同,创建不同的sqlSource
11.替换每个占位符对应参数属性的映射
12.解析后的内容封装到boundSql对象中返回
13.调用BaseExecutor执行
14.调用SimpleExecutor执行
15.
实例化statement,设置超时时间等参数