Mybatis源码流程分析

Mybatis源码包

├─annotations   	->注解相关 比如select insert
├─binding       	->mapper相关
├─builder       	->解析xml相关
├─cache         	->缓存
├─cursor        	->返回结果resultset
├─datasourcer   	->数据管理 
├─exceptionsr   	->异常
├─executorr     	->执行器
├─io            	->classloader
├─jdbc          	->jdbc
├─lang          	->jdk7 jdk8
├─logging      		->日志相关
├─mapping       	->mapper相关的封装
├─parsing       	->xml相关解析
├─plugin        	->拦截器
├─reflection    	->反射相关
├─scripting     	->数据厂家
├─session      		->sessiomn
├─transaction   	->事务
└─type          	->返回类型对应

mybatis核心概念

Configuration

  • 管理mysql-config.xml全局配置关系类

SqlSessionFactory

  • Session管理工厂接口 Session
  • SqlSession是一个面向用户(程序员)的接口。SqlSession中提供了很多操作数据库的方法

Executor

  • 执行器是一个接口(基本执行器、缓存执行器)
  • 作用:SqlSession内部通过执行器操作数据库

MappedStatement

  • 底层封装对象
  • 作用:对操作数据库存储封装,包括 sql语句、输入输出参数

StatementHandler

  • 具体操作数据库相关的handler接口

ResultSetHandler

  • 具体操作数据库返回结果的handler接口

Mybatis本质

在这里插入图片描述

调用链路

如何获取数据库源
去解析我们mybatis- config. xml内容然后加载到Configuration

org.apache.ibatis.session.SqlSessionFactoryBui lder.build (java.io.InputStream)
 >org.apache.ibatis.builder.xml.XMLConfigBuilder
  >org.apache.ibatis.builder.xml.XMLConfigBuilder.parse
   >org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration
    >org.apache .ibatis.session.SqlSessionFactoryBuilder.build (org.apache.ibatis.session.Configuration)
     >org.apache.ibatis.session .defaults.DefaultSqlSessionactory

SQL如何获取的BoundSql

org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession()
 >org.apache.ibatis.session.defaults.DefaultSqlSession
  >org.apache.ibatis.binding.MapperRegistry.getMapper
   >org.apache.ibatis binding.MapperMethod.execute
    >org.apache.ibatis.mapping.MappedStatement.getBoundSql
     >org.apache.ibatis.executor.statement.StatementHandler.query
      >org.apache.ibatis.executor.resultset.ResultSetHandler.handleResultSets

在这里插入图片描述

拿到sql谁去执行

org.apache.ibatis.executor.simppleExecutor
 >org.apache.ibatis.executor.Executor.query 
  >org.apache.ibatis.executor.CachingExecutor.createCacheKey构建缓存
   >org.apache.ibatis.executor.SimpleExecutor.doQuery
    >org.apache.ibatis.session.Conf iguration.newStatementHandler
    >org.apache.ibatis.executor.SimpleExecutor.prepareStatement
     >org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement

总体流程图

在这里插入图片描述

相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页