源码下载
从官网的地址 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_subjectVALUES (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的源码环境初步搭建结束,上面筹备开始源码的学习!!!!