zoukankan      html  css  js  c++  java
  • Mybatis中使用dao实现类的执行过程分析——断点调试和跟踪源码技能

    mybatis中使用dao实现类的执行过程分析

    断点调试和跟踪源码技能

    1.在实现类和测试类中打断点
    1583310192943

    1583310240709

    2.启用debug调试,下一步得到实现类

    1583310384535

    3.选中SqlSession,右键单击

    1583310492308

    4.选中SqlSession,右键单击,选择Show Implementations显示它的所有实现,通过断点调试,我们知道选择DefaultSqlSession

    1583310654563

    5.当我们选中DefaultSqlSession,上方会有显示,然后双击

    1583310951769

    6.进到DefaultSqlSession中,找到我们在findAll()中调用的selectList,发现最终执行的是SqlSession的selectList方法,在这个方法中找到executor的query方法

    1583311599389

    7.发现Executor又是一个接口,继续打断点,找实现类到底是哪一个

    1583311768117

    8.断点调试,得知Executor的实现类是CachingExecutor
    1583312026792

    9.由此通过diagram找到CachingExecutor

    1583312301701

    10.打开CachingExecutor,在query中打断点,调试下一步,可以进到此处。又发现一个query方法

    1583312500604

    11.继续打断点,debug下一步进到此处

    1583312618513

    12.接下来在这两处打断点,继续下一步调试,发现走的第二行。

    1583312770267

    13.由delegate找到SimpleExecutor,所以在Executor类图中选择SimpleExecutor

    1583313118916

    14.打开SimpleExecutor,找到queryFromDatabase方法

    1583313294884

    15.queryFromDatabase方法中有doQuery方法,跟进,发现这是一个抽象方法

    1583313457870

    所以最终执行的是SimpleExecutor的doQuery方法

    ❤️非常重要的一张图-分析编写dao实现类Mybatis的执行过程(在新标签中打开图片查看)

    非常重要的一张图-分析编写dao实现类Mybatis的执行过程

    ❤️非常重要的一张图-分析代理dao的执行过程


  • 相关阅读:
    从boosting谈起
    《人月神话》读书摘记
    Python中input()的使用方法
    Web前端攻击方式及防御措施
    吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
    Mybatis的Mapper文件sql语句中使用常量值或者枚举常量值
    Java依据文件头获取文件类型
    MySQL查询优化
    RabbitMQ学习教程
    SpringBoot2.x.x + Shiro + Redis 前后端分离实现
  • 原文地址:https://www.cnblogs.com/sunyanblog/p/12416064.html
Copyright © 2011-2022 走看看