@mybatis是一个轻量级的ORM框架,研究源码可以让我们加深对mybatis的的理解
源码路径
mybatis源码下载路径
所依赖的父工程下载路径
在编译mybatis前需先将parent工程编译
1.首先准备环境
首先必须安装mysql,jdk
1.1 mybatis-config.xml配置文件
1.2 jdbc配置信息
1.3 创建mapper.xml文件
2.创建测试类,通过加载mybatis-config.xml配置文件方式进行源码流程解析
2.1 测试类代码
@Slf4j
public class MybatisWithXml {
/***
* xml方式
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//全局配置
String resource = "mybatis-config.xml";
//加载配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession
SqlSession session = sqlSessionFactory.openSession();
//执行mapper.xml文件中的sql,并且返回查询结果
Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 1);
log.info("blog:{}",blog);
}
}
2.2 在构建SqlSessionFactory处打上断点,跟踪mybatis如何解析mybatis-config.xml配置文件
进入断点F7进行调试,可以发现mybatis首先进入org.apache.ibatis.session.SqlSessionFactoryBuilder这个类的build方法
org.apache.ibatis.session.SqlSessionFactoryBuilder
public SqlSessionFactory build(InputStream inputStream) {
return build(inputStream, null, null);
}
再通过方法重载调到重载后的build方法,核心的解析方法是通过
XMLConfigBuilder进行配置文件的解析
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
try {
XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
return build(parser.parse());
} catch (Exception e) {
throw ExceptionFactory.wrapException("Error building SqlSession.", e);
} finally {
ErrorContext.instance(