MyBatis的底层详细实现过程(含图解)

Mybatis详细的执行流程!

ctrl+左键 可以进入类的内部

  1. 第一步:Resources类通过调用静态方法 getResourceAsStream(String resource) 先读取并加载 mybatis-config.xml 核心配置文件 并返回一个字节输入流( 包不要导错: import org.apache.ibatis.io.Resources;)
    在这里插入图片描述
  2. 第二步:通过 SqlSessionFactoryBuilder类 的一个对象调用 build(InputStream inputStream)方法获得一个 SqlSessionFactory 的对象(本质是调用了 build(InputStream inputStream, String environment, Properties properties) 这个方法)
    在这里插入图片描述
  • build(InputStream inputStream)内部调用的重载方法
    在这里插入图片描述
    parser.parse(),这个parser 是 new XMLConfigBuilder(…)出来的一个对象
  1. 第三步:XMLConfigBuilder类 开始解析配置文件
  • 首先调用XMLConfigBuilder中的parse()方法
    在这里插入图片描述
  • 然后又在 parse()方法 内部调用了 XPathParser类的evalNode(String expression)方法
    在这里插入图片描述
  • 方法调用太多,就不一个一个介绍了,总而言之就是通过方法调用方法,解析完了你的mybatis-config.xml核心配置文件
  1. 第四步:执行完XMLConfigBuilder类的parse()方法后,SqlSessionFactoryBuilder类 才开始调用 build(Configuration config) ,实例化SqlSessionFactory
    在这里插入图片描述
  2. 第五步:实例化 SqlSessionFactory 后,通过 SqlSessionFactory 的实例对象调用 openSession()方法 ,获得SqlSession的实例化对象
    在这里插入图片描述
    这里得等 this.configuration.getDefaultExecutorType() 方法执行完才会执行 openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit)这个方法
  • 先执行 this.configuration.getDefaultExecutorType() 方法
    在这里插入图片描述
  • 再执行 openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) 这个方法
    在这里插入图片描述
  1. 第六步:拿到SqlSession以后,就可以调用getMapper(Class var)获得实体类对应的mapper接口的对象,然后调用接口内的方法,实现CRUD等操作

大概用流程图表示一下实现过程:
在这里插入图片描述
自己写的获取SqlSession的工具类,代码如下:

public class mybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            String resource="mybatis-config.xml";
            InputStream in = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlsession(){
        return sqlSessionFactory.openSession();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值