Mybatis--第三部分:mybatis架构原理和源码剖析
trueAndFalse 人气:0mybatis架构原理
1.架构设计
我们把Mybatis的功能架构分为三层:
(1) API接⼝层:
提供给外部使⽤的接⼝ API,开发⼈员通过这些本地API来操纵数据库。
接⼝层⼀接收到 调⽤请求就会调⽤数据处理层来完成具体的数据处理。
MyBatis和数据库的交互有两种⽅式:
a. 使⽤传统的MyBati s提供的API ;
b. 使⽤Mapper代理的⽅式
(2) 数据处理层:
负责具体的SQL查找、SQL解析、SQL执⾏和执⾏结果映射处理等。
它主要的⽬的是根据调⽤的请求完成⼀次数据库操作。
(3) 基础⽀撑层:
负责最基础的功能⽀撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是
共 ⽤的东⻄,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的⽀撑
2.主要组件和关系梳理
SqlSeesion:
作为Mybatis工作的顶层的API接口,作为会话访问,完成增删改查功能
Executor:
Mybatis的核心执行器,负责SQL动态语句生成,查询缓存和维护
StatementHandler:
parameterHandler:
负责JDBC和Statement的交互,包括Statement参数设置
TypeHandler:负责JDBC与javaType之间数据转换,
1.对Statement对象设置 特定的参数
2.对Statement返回的结果集,取出特定的列
ResultSetHandler:
将JDBC返回的结果集 resultSet,转换成List
mybatis源码剖析
1.Mybatis初始化过程
//读取配置文件,读成字节输入流,还没开始解析
Inputstream inputstream = Resources.getResourceAsStream("mybatisconfig.xml");
//这⼀⾏代码正是初始化⼯作的开始。 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
// 1.我们最初调⽤的build public SqlSessionFactory build (InputStream inputStream){ //调⽤了重载⽅法 return build(inputStream, null, null); } // 2.调⽤的重载⽅法 public SqlSessionFactory build (InputStream inputStream, String environment, Properties properties){ try { // XMLConfigBuilder是专⻔解析mybatis的配置⽂件的类 XMLConfigBuilder parser = new XMLConfigBuilder(inputstream, environment, properties); //这⾥⼜调⽤了⼀个重载⽅法。parser.parse()的返回值是Configuration对象 return build(parser.parse()); } catch (Exception e) { throw ExceptionFactory.wrapException("Error building SqlSession.", e) }
2.执行sql流程
SqlSession:
SqlSession是⼀个接⼝,它有两个实现类:DefaultSqlSession (默认)和SqlSessionManager (弃⽤,不做介绍)
SqlSession是MyBatis中⽤于和数据库交互的顶层类,通常将它与ThreadLocal绑定,⼀个会话使⽤⼀
个SqlSession,并且在使⽤完毕后需要close
SqlSession中的两个最重要的参数,configuration与初始化时的相同,Executor为执⾏器
public class DefaultSqlSession implements SqlSession { private final Configuration configuration; private final Executor executor; }
Executor:
Executor也是⼀个接⼝,他有三个常⽤的实现类:
BatchExecutor (重⽤语句并执⾏批量更新)
ReuseExecutor (重⽤预处理语句 prepared statements)
SimpleExecutor (普通的执⾏器,默认)
加载全部内容