阶段3 1.Mybatis

mac2022-06-30  10

delete方法没有并SqlSession的delete方法,而是调用的Upadte方法。 在测试类这里加断点。 实际的方法体内也加断点 运行测试方法,选择debug的方式 走到断点这里。会看到factory是DefaultSqlSessionFactory session是DefaultSqlSession

找借口的实现类

选中SqlSession 选中SqlSession并鼠标右键---show Implementations 显示它的所有实现 然后就显示了两个。通过刚才的断点调试我们知道是是DefaultSqlSession 选中下面的DefaultSqlSession后上面就出现了路径。然后双击上面的DefaultSqlSession 然后就进入了DefaultSqlSession这个类里 尅看到selectList的方法。最终执行的是最下面的seletList方法。 第一个selectList里面调用了两个参数的。连个参数的selectList里面有调用的是三个参数的selectList 继续找到query方法里面 Executor方法又是一个接口 我们在这里加断点看一下。Executor的的实现类是谁。 继续调用testFindAll方法 debug测试 断点到代码这里。 右键找到 CachingExecutor 里面有个query的方法 断点再走一步。进入到了这里。 query方法的代码 继续走就又到了这个断点这里 看到delegate是一个SimpleExecutor 这里只有一个doQuery方法 那么在这个过程中肯定进行了转换。我们看到SimpleExecutor继承了BaseExecutor 父类里面有query的方法 doQuery是一个抽象方法。被它的子类也就是SimpleExecutor实现了。 所以最终执行的是SimpleExecutor这个子类的doQuery方法 SimpleExeccutor重写了父类的doQuery方法。并在里面最终调用了Handler的query方法 断点过来。看到handler是RoutingStatementHandler 进去到这个Handler里面。进去到这个StatementHandler 找到Digram关系图。---show Digram显示关系图。 查看实现类 找到RoutingStatementHandler 找到query方法内加断点  

转载于:https://www.cnblogs.com/wangjunwei/p/11311942.html

最新回复(0)