从官方仓库 https://github.com/mybatis/mybatis-3 Fork 出属于自己的仓库。为什么要 Fork ?既然开始阅读、调试源码,我们可能会写一些注释,有了自己的仓库,可以进行自由的提交。
使用 IntelliJ IDEA 从 Fork 出来的仓库拉取代码。
本文使用的 MyBatis 版本为 3.5.0-SNAPSHOT 。
MyBatis 想要调试,非常方便,只需要打开 org.apache.ibatis.autoconstructor.AutoConstructorTest 单元测试类,任意一个单元测试方法,右键,开始调试即可。
当然,考虑到让大家更好的理解 AutoConstructorTest 这个类,下面,我们还是详细解析下。AutoConstructorTest 所在在 autoconstructor 包下,整体结构如下:

mybatis-config.xml ,MyBatis 配置文件。XML 如下:
|
<environments /> 标签中,配置了事务管理和数据源。考虑到减少外部依赖,所以使用了 HSQLDB 。<mappers /> 标签中,配置了需要扫描的 Mapper 文件。目前,仅仅扫描 AutoConstructorMapper.xml 文件。AutoConstructorMapper.xml ,Mapper 文件。代码如下:
|
org.apache.ibatis.autoconstructor.AutoConstructorMapper 。
public interface AutoConstructorMapper {
|
CreateDB.sql 文件,用于单元测试里,初始化数据库的数据。如下:
DROP TABLE subject
|
subject 表,并初始化三条数据。extensive_subject 表,并初始化三条数据。在 AutoConstructorMapper 中,我们可以看到有四个 POJO 类。但是,从 CreateDB.sql 中,实际只有两个表。这个是为什么呢?继续往下看噢。
package org.apache.ibatis.autoconstructor;
|
subject 表。@AutomapConstructor 注解,表示 MyBatis 查询后,在创建 AnnotatedSubject 对象,使用该构造方法。
package org.apache.ibatis.autoconstructor;
|
subject 表。weight 和 height 方法参数的类型是 int ,而不是 Integer 。那么,如果 subject 表中的记录,这两个字段为 NULL 时,会创建 PrimitiveSubject 对象报错。
package org.apache.ibatis.autoconstructor;
|
subject 表。height 方法参数的类型是 Height ,而不是 Integer 。因为 MyBatis 无法识别 Height 类,所以会创建 BadSubject 对象报错。
package org.apache.ibatis.autoconstructor;
|
extensive_subject 表。org.apache.ibatis.autoconstructor.AutoConstructorTest ,单元测试类。
private static SqlSessionFactory sqlSessionFactory;
|
mybatis-config.xml 配置文件。CreateDB.sql SQL 文件。原文:https://www.cnblogs.com/siye1989/p/11619153.html