调试准备工作(步骤:Window -> Show View -》...):
□ 打开调试断点Breakpoint:
□ 打开变量监视:
要看一个方法的内部细节,按f5,进入
要快速跳到某个位置【在目标位置上打个断点】,然后按f8
观察方法的细节(执行流程),一步一步走,按f6
去除掉所有断点(编译器是eclipse)
□ 注意看开始标记的执行位置对不对
f5调试的方式进入【若进入的是不相干的,按f7返回,再按f5进入一次】
举例:
User user = mapper.get(1L); //在这里打一个断点进入,会先进入Long类,因为执行顺序是(1L)先执行呀,所以先进入它之后,再执行get方法按ctr 和 按调试的f5的区别:
□ ctr:是进入“被选中的代码(类、接口、方法)”的定义的位置【强调点是代码的定义】
□ f5:是对于当前代码按执行的先后顺序进行执行,进入、执行它的内部【强调点是代码的执行】
按ctr 结合鼠标, 可以知道代码下一步的去向(按ctr要注意的细节:ctr默认进入的是被选中的代码的定义,不是实现过程,进入之后发现没看到什么有帮助理解的代码,返回返回按住ctr,选择实现(若是有多个实现,不知道选哪个,可以通过调试f5进入),再按鼠标进入。

重新开始调试细节:
(1)关闭上一次调试
(2)点击 开始调试之前,保留开始位置的断点前面的√,其他断点前面的√先去掉(开始调试之后才√回来)
进入一个方法后了解到方法的细节,想返回接着往下执行,按f7 返回 【返回按f7】
一般在深入了解某个模块之后,可以按返回,返回。。。然后接着了解下一个模块
1、重点理解执行逻辑(执行过程可以按control进入方法或类,理解下一步去向后,光标回到当前位置【快捷键是alt+←】)
2、看源码过程理清思路,异常相关的(error、exception、throw),让代码更加健硕的细节可以忽略;栈相关的stack,底层的可以忽略
3、在代码中,看到选择分支的话,可以观察变量的值(判断条件)知道要进入哪个分支
4、在代码中,看到不理解的代码,可以先往下执行,然后通过观察变量的值进行理解【还可结合官网进行理解】
5、读取流、加载资源、绑定命名空间、参数转化不是重点
6、构造构造器不是重点,重点是看 构造器的构造过程
7、构造解析器不是重点,重点是看 解析器的解析过程
8、创建了子类要注意:什么类型的子类?当子类有封装的父类或兄弟类时候,注意封装的父类或兄弟类是什么类型的?
control进入方法或类,理解下一步去向后,光标回到当前位置【快捷键是alt+←】)










构造器的构造过程:
解析器的解析过程:




□ configuration 配置对象(在阅读会话工厂对象构建的源码的时候咱就了解过它了,不是重点)
□ executor 执行器(重点,因为在return 会话对象之前构建了executor执行器)
□ autoCommit (是否提交,布尔值,不是重点)

/* 测试查询 */ @Test public void testGet() throws IOException { // 1、从classpath路径加载mybatis全局配置文件mybatis-config.xml InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); // 2、创建SqlSessoinFactory会话工厂对象,好比连接池DataSource SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); // 3、创建SqlSession会话对象,好比连接对象Connection SqlSession session = factory.openSession(); // 4、获取mapper对象 UserMapper mapper = session.getMapper(UserMapper.class); //执行sql操作 User user = mapper.get(1L); System.out.println(user); // 5、关闭资源 session.close(); }
查看源码得知,表名上是创建了一个SqlSessoin会话对象, 实际上在创建SqlSessoin会话对象的时候还创建了一个全执行器对象。【咱还顺带看了一下执行器的创建过程啦】
执行器对象Executor【CachingExcutor(Simple)带有缓存的执行器】,是mybatis的调度中心,负责sql的生成和查询缓存维护。在创建SqlSessoin会话对象创建,会执行pluginAll方法



















InterceptorChaiin 拦截器链,多个拦截器合成
Configuration 全局配置对象,封装了所有的配置信息
Executor 执行器,myBatis的调度中心,负责sql生成和查询缓存维护,在创建sqlSession对象之前。创建ok之后,会执行pluginAll方法
MappedStatement 映射语句对象,封装了一个元素节点(insert|delete|update|select)的信息
StatementHandler 语句处理器,封装了JDBC的DML/DQL操作,参数设置,在创建对象时,执行pluginAll方法
■ 在创建StatementHandler 创建对象之前,先创建参数处理器和结果集处理器
□ ParameterHandler 参数处理器,把用户传入的参数转化为JDBC需要的参数值,在创建对象时,执行 pluginAll方法
□ ResultSetrHandler 结果集处理器,在结果集中的数据封装到List集合,在创建对象时,执行 pluginAll方法