第一阶段
- 通过JDK动态代理 获取UserMapper的代理对象
第二阶段
-
获取MapperMethod对象(实例) 分为两个属性 SqlCommand和MehodSignature
- 获取sqlStatement(name 和 SqlCommand命令类型 SELECT或INSERT等)
- 获取MehodSignature 用于维护方法签名,比如方法的返回值类型,入参等等
第三阶段(确定调用sqlsession里面的哪个方法)
-
执行excute
-
根据上一阶段获得的sqlCommand里面的type走不同的流程
-
根据methodSignature中的获取属性名与入参值的映射关系
-
执行sql查询操作 调用SqlSession具体方法(第四阶段)
第四阶段 (查询前的缓存处理)
- 获取boundSql
- 生成一二级缓存需要的缓存key
- 开始执行查询操作(缓存中有数据返回缓存数据)
- 执行query方法(第五阶段)
第五阶段(执行db)
- 调用StatementHandler的prepareed进行 [sql的预编译]
- 通过preparedStatementHandler的parameterize来给 [sql设置入参]
- 通过jdbc执行数据操作
- 把查询出来的值放到缓存里面
第六阶段 (针对ResultSet结果集转换成POJO)
- 通过JDBC获取结果集ResultSet, 分装到ResultSetWrapper实例中
- 处理结果集 解析行数据