背景
一直想开始看框架源码,本来想从Spring看起,发现Spring框架源码太庞大,不太容易上手,所以选择先对Mybatis源码进行阅读,这篇文章先开个头,把代码跑起来
拉取代码
可以参考官方文档,将项目拉取到本地,地址:https://mybatis.org/mybatis-3/zh/index.html。我们把项目导入到idea里,执行mvn clean install命令,下载好依赖,我这里选择的是3.4x版本。
跑起来
我们可以参考官方文档来跑一个小model
//先配置mybatis-config.xml文件
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
//配置config.properties文件,这里需要注意格式
jdbc.driver=org.hsqldb.jdbcDriver
jdbc.url=jdbc:mysql://47.114.38.76:3306/qms?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
//创建映射文件添加到mybatis-config.xml文件
<mappers>
<mapper resource="org/apache/ibatis/test/UserMapper.xml"/>
</mappers>
//创建一个main函数跑起来
static{
String resource = "org/apache/ibatis/test/mybatis-config.xml";
String properties = "org/apache/ibatis/test/config.properties";
InputStream inputStream = null;
Properties propertie = null;
try {
inputStream = Resources.getResourceAsStream(resource);
propertie = Resources.getResourceAsProperties(properties);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,propertie);
}
public static void main(String[] args){
SqlSession session = sqlSessionFactory.openSession();
session.selectOne("selectCorp");
UserMapper mapper = session.getMapper(UserMapper.class);
UserDO userDO = mapper.get("11");
}
总结
配置属性可以在三个地方配置:
mybatis-config.xml, config.properties,SqlSessionFactoryBuilder.build()
如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
首先读取在 properties 元素体内指定的属性。
然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
优先级:SqlSessionFactoryBuilder.build() > mybatis-config.xml > config.properties