MyBatis源码(查询操作)

245 阅读1分钟

第一阶段

  • 通过JDK动态代理 获取UserMapper的代理对象

第二阶段

  • 获取MapperMethod对象(实例) 分为两个属性 SqlCommand和MehodSignature

    • 获取sqlStatement(name 和 SqlCommand命令类型 SELECT或INSERT等)
    • 获取MehodSignature 用于维护方法签名,比如方法的返回值类型,入参等等

第三阶段(确定调用sqlsession里面的哪个方法)

  • 执行excute

  • 根据上一阶段获得的sqlCommand里面的type走不同的流程

  • 根据methodSignature中的获取属性名与入参值的映射关系

    图片.png

  • 执行sql查询操作 调用SqlSession具体方法(第四阶段) 图片.png

第四阶段 (查询前的缓存处理)

  • 获取boundSql
  • 生成一二级缓存需要的缓存key
  • 开始执行查询操作(缓存中有数据返回缓存数据)
  • 执行query方法(第五阶段)

第五阶段(执行db)

  • 调用StatementHandler的prepareed进行 [sql的预编译]
  • 通过preparedStatementHandler的parameterize来给 [sql设置入参]
  • 通过jdbc执行数据操作
  • 把查询出来的值放到缓存里面

第六阶段 (针对ResultSet结果集转换成POJO)

  • 通过JDBC获取结果集ResultSet, 分装到ResultSetWrapper实例中
  • 处理结果集 解析行数据