亲宝软件园·资讯

展开

Mybatis--第三部分:mybatis架构原理和源码剖析

trueAndFalse 人气:0

mybatis架构原理

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 (普通的执⾏器,默认)



加载全部内容

相关教程
猜你喜欢
用户评论