源码下载
从官网的地址 https://github.com/mybatis/mybatis- 3 上拉取下来最新版本的代码。我拉取时的版本为 3.5.8-SNAPSHOT。
代码调试
导入拉取下来的源码我的项目后,定位到 org.apache.ibatis.autoconstructor 包的门路下,如下所示:
mybatis-config.xml
批改 mybatis-config.xml 中的数据源配置。我应用的是 mysql 数据库,批改 driver 的值为“com.mysql.cj.jdbc.Driver”。再按依照本人的数据库地址、用户、明码进行配置即可。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://xxx.xxx.xxx.xxx/test"/>
<property name="username" value="xxxx"/>
<property name="password" value="xxxx" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/apache/ibatis/autoconstructor/AutoConstructorMapper.xml"/>
</mappers>
</configuration>
CreateDB.sql
拉取下来的源码中应用的 mybatis-config.xml 应用的是 hsqldb 数据库。我应用的是 mysql 数据中,执行运行代码时,执行 CreateDB.sql 会报错,须要批改下。一共批改了 3 点:
- DROP TABLE 语句
- extensive_subject 表的 aBoolean 字段类型为 tinyint(1)
- extensive_subject 表的 aClob、aBlob 字段类型 longtext
DROP TABLE IF EXISTS subject;
DROP TABLE IF EXISTS extensive_subject;
CREATE TABLE subject (
id INT NOT NULL,
name VARCHAR(20),
age INT NOT NULL,
height INT,
weight INT,
active BIT,
dt TIMESTAMP
);
CREATE TABLE extensive_subject (
aByte TINYINT,
aShort SMALLINT,
aChar CHAR,
anInt INT,
aLong BIGINT,
aFloat FLOAT,
aDouble DOUBLE,
aBoolean tinyint(1),
aString VARCHAR(255),
anEnum VARCHAR(50),
aClob longtext,
aBlob longtext,
aTimestamp TIMESTAMP
);
INSERT INTO subject VALUES
(1, 'a', 10, 100, 45, 1, CURRENT_TIMESTAMP),
(2, 'b', 10, NULL, 45, 1, CURRENT_TIMESTAMP),
(2, 'c', 10, NULL, NULL, 0, CURRENT_TIMESTAMP);
INSERT INTO extensive_subject
VALUES
(1, 1, 'a', 1, 1, 1, 1.0, 1, 'a', 'AVALUE', 'ACLOB', 'aaaaaabbbbbb', CURRENT_TIMESTAMP),
(2, 2, 'b', 2, 2, 2, 2.0, 2, 'b', 'BVALUE', 'BCLOB', '010101010101', CURRENT_TIMESTAMP),
(3, 3, 'c', 3, 3, 3, 3.0, 3, 'c', 'CVALUE', 'CCLOB', '777d010078da', CURRENT_TIMESTAMP);
AutoConstructorTest
运行 AutoConstructorTest 的 fullyPopulatedSubject 办法,查问 subject 中 id 为 1 的数据。我在对应的 PrimitiveSubject 对象中增加了个 toString 办法。在 fullyPopulatedSubject 办法中打印查问出的对象。
代码如下:
@Test
void fullyPopulatedSubject() {try (SqlSession sqlSession = sqlSessionFactory.openSession()) {final AutoConstructorMapper mapper = sqlSession.getMapper(AutoConstructorMapper.class);
final Object subject = mapper.getSubject(1);
System.out.println(subject.toString());
assertNotNull(subject);
}
}
运行后果:
至此 mybatis 的源码环境初步搭建结束,上面筹备开始源码的学习!!!!