MyBatis —— 调试环境搭建
1. 依赖工具
- Maven
- Git
- JDK
- IntelliJ IDEA
2. 源码拉取
从官方仓库 https://github.com/mybatis/mybatis-3 Fork
出属于自己的仓库。为什么要 Fork
?既然开始阅读、调试源码,我们可能会写一些注释,有了自己的仓库,可以进行自由的提交。
使用 IntelliJ IDEA
从 Fork
出来的仓库拉取代码。
本文使用的 MyBatis 版本为 3.5.0-SNAPSHOT
。
3. 调试
MyBatis 想要调试,非常方便,只需要打开 org.apache.ibatis.autoconstructor.AutoConstructorTest
单元测试类,任意一个单元测试方法,右键,开始调试即可。
当然,考虑到让大家更好的理解 AutoConstructorTest 这个类,下面,我们还是详细解析下。AutoConstructorTest 所在在 autoconstructor
包下,整体结构如下:
4. mybatis-config.xml
mybatis-config.xml
,MyBatis 配置文件。XML 如下:
|
- 在
<environments />
标签中,配置了事务管理和数据源。考虑到减少外部依赖,所以使用了 HSQLDB 。 - 在
<mappers />
标签中,配置了需要扫描的 Mapper 文件。目前,仅仅扫描AutoConstructorMapper.xml
文件。
5. AutoConstructorMapper.xml
AutoConstructorMapper.xml
,Mapper 文件。代码如下:
|
- 对应的接口为
org.apache.ibatis.autoconstructor.AutoConstructorMapper
。
5.1 AutoConstructorMapper
public interface AutoConstructorMapper {
|
- 使用注解的方法,编写 SQL 。
6. CreateDB.sql
CreateDB.sql
文件,用于单元测试里,初始化数据库的数据。如下:
DROP TABLE subject
|
- 创建了
subject
表,并初始化三条数据。 - 创建了
extensive_subject
表,并初始化三条数据。
7. POJO
在 AutoConstructorMapper 中,我们可以看到有四个 POJO 类。但是,从 CreateDB.sql
中,实际只有两个表。这个是为什么呢?继续往下看噢。
7.1 AnnotatedSubject
package org.apache.ibatis.autoconstructor;
|
- 对应
subject
表。 @AutomapConstructor
注解,表示 MyBatis 查询后,在创建 AnnotatedSubject 对象,使用该构造方法。
7.1.1 PrimitiveSubject
package org.apache.ibatis.autoconstructor;
|
- 对应的也是
subject
表。 - 和 AnnotatedSubject 不同,在其构造方法上,
weight
和height
方法参数的类型是int
,而不是 Integer 。那么,如果subject
表中的记录,这两个字段为NULL
时,会创建 PrimitiveSubject 对象报错。
7.1.2 BadSubject
package org.apache.ibatis.autoconstructor;
|
- 对应的也是
subject
表。 - 和 AnnotatedSubject 不同,在其构造方法上,
height
方法参数的类型是 Height ,而不是 Integer 。因为 MyBatis 无法识别 Height 类,所以会创建 BadSubject 对象报错。
7.2 ExtensiveSubject
package org.apache.ibatis.autoconstructor;
|
- 对应的也是
extensive_subject
表。 - 这是个复杂对象,基本涵盖了各种类型的数据。
8. AutoConstructorTest
org.apache.ibatis.autoconstructor.AutoConstructorTest
,单元测试类。
8.1 setUp
private static SqlSessionFactory sqlSessionFactory;
|
- 创建 SqlSessionFactory 对象,基于
mybatis-config.xml
配置文件。 - 初始化数据到内存数据库,基于
CreateDB.sql
SQL 文件。