MyBatis源码分析(二):MyBatis整体架构及原理

一、Mybatis整体架构导图

 

二、Mybatis的核心组成

SqlSessionFactoryBuilder(构造器):

根据配置信息(XML)生成SqlSessionFactory工厂接口,构造器使用了org.apache.ibatis.builder.xml包下的XMLConfigBuilder对Mybatis-config配置文件解析,该XML解析类使用了org.apache.ibatis.parsing解析包下的工具解析XML各个节点的信息,构建Configuration,再用Configuration创建SqlSessionFactory,然后SqlSessionFactoryBuilder生命周期结束。其中,默认生成的是DefaultSqlSessionFactory。

 

SqlSessionFactory(工厂接口):

依靠工厂来生成SqlSession会话接口,生命周期贯穿整个应用,重复创建工厂接口会消耗更多数据库连接资源。

 

SqlSession(会话接口):

发送SQL去执行并返回结果,还能获取Mapper的接口,生命周期存在于请求数据库处理事务中,结束后要关闭,线程不安全。它里面主要有四大对象:

  1. Executor 执行器:SIMPLE、REUSER、BATCH
  2. StatementHandler 数据库会话器:SimpleStatementHandler、PreparedStatementHandler、CallableStatementHandler,通过RoutingStatementHandler的适配器模式穿建不同的StatementHandler对象
  3. ParameterHandler SQL参数处理器:对预编译的SQL语句进行参数设置,完成预编译参数的设置,从parameterObject对象中取得参数,然后同TypeHandler进行参数处理
  4. ResultHandler 结果处理器:组装结果集来返回的,里面有处理存储过程输出参数的方法,还有包装结果集的方法,默认情况下用DefaultResultSetHandler类,这个接口的实现有点复杂,涉及到JAVASSIST或者CGLIB作为延迟加载,然后用TypeHandler和ObjectFactory进行结果组装结果再返回

SqlSession内部运行图:

 

SQL Mapper(Java接口+XML文件 或者 Java接口+Java注解):

有对应的SQL和映射规则,负责发送SQL执行,并返回结果。映射器的内部由3部分组成:

MappedStatement,保存映射的一个节点<select|insert|delete|update>,包括配置的SQL,SQL的id、缓存信息、resultMap、parameterType、resultType、languageDriver等配置内容;

SqlSource,提供SqlBound对象,是MappedStatement的一个属性;

SqlBound,建立SQL和参数的地方,有3个常用属性,sql、parameterObject,parameterMappings。

 

posted @ 2019-07-15 22:54  賣贾笔的小男孩  阅读(459)  评论(0编辑  收藏  举报