mybatis源码学习之一mybatis-config.xml配置文件解析流程

本文档详细介绍了mybatis-config.xml配置文件的解析过程,从环境设置、数据源配置到mapper.xml文件的加载。通过创建测试类,跟踪SqlSessionFactory的构建,揭示了mybatis如何通过XMLConfigBuilder进行配置解析,并遵循xml文件的定义顺序。
摘要由CSDN通过智能技术生成

@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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值