Mybatis源码解析 - 简介

最近一直在折腾sharding-jdbc,遇到不少性能相关问题,为了更清晰的了解问题所在,trace了不少源码。
借此机会,对mybatis的源码进行解析,本篇只做简要的介绍。

一. 概念介绍

1.1 组件介绍

  • Configuration

    配置信息,包含Mybatis大部分配置信息(ALL IN ONE)

    结构:

    • Environment
      • TransactionFactory 事务工厂
      • DataSource 数据源
    • Mapper注册信息
    • 拦截器信息
    • 配置信息
  • SqlSessionFactory

    创建SqlSession

  • SqlSession

    与Mybatis交互的主要接口,提供语句执行、事务管理及映射器(Mapper)获取的接口

1.2 执行流程

语句执行流程:

  1. 生成Configuration (SqlSessionFactoryBuilder解析xml构建)

    # SqlSessionFactoryBuilder line 47
      public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
        try {
          XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
          return build(parser.parse()); // 这里进行生成configuration
        } catch (Exception e) {
          ...
        } finally {
          ...
        }
      }
    
    # XMLConfigBuilder line:94
     public Configuration parse() {
        if (parsed) {
          throw new BuilderException("Each XMLConfigBuilder can only be used once.");
        }
        parsed = true;
        parseConfiguration(parser.evalNode("/configuration"));
        return configuration;
     }
    
  2. 基于Configuration构建SqlSessionFactory

    # SqlSessionFactoryBuilder line:91
      
    public SqlSessionFactory build(Configuration config) {
        return new DefaultSqlSessionFactory(config);
    }
    
  3. SqlSessionFactory生成SqlSession

    调用openSession方法,获取SqlSession

  4. SqlSession执行语句

    SqlSession定义了许多数据操作的方法,底层实现则交由对应的Executor执行,并返回结果集

1.3 核心模块

在这里插入图片描述

  • 配置解析

    对xml进行解析,并转化为对应的对象信息。如mybatis-config.xml解析为配置类Configuration

  • 反射

    对于ORM,需要经常对类的属性、对象的成员、方法进行判断赋值。而Mybatis则提供了反射模块来支持ORM的这个特性

  • 对象映射/绑定

    负责jdbcType与java类之间的转化

  • 语句执行

    语句执行包含几个子流程

    1. SQL解析
    2. SQL执行
    3. 返回结果
  • 数据源管理

    1. 池化数据源 PooledDataSource
    2. 普通数据源 UnpooledDataSource
  • 事务管理

  • 插件

    Mybatis支持自定义插件,对流程进行调整干预

  • 日志
    支持不同类型的日志实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值