手写Mybatis(二)

手写Mybatis(二)

一中讲述了,编写Mybatis的需求以及思路,这一篇我们来聊一下Mybatis的内容。

一、Mybatis架构图

在这里插入图片描述

  • 接口层
    接口层是MyBatis提供给开发人员的一套API,主要使用SqlSession接口。通过SqlSession接口和Mapper 接口,开发人员可以通知MyBatis框架调用那一条SQL命令以及SQL命令关联参数。
  • 数据处理层
    数据处理层是MyBatis框架内部的核心实现。来完成对映射文件的解析与数据处理,包括:
    1. 参数解析与参数绑定
    2. SQL解析
    3. 结果集映射解析与结果集映射处理
  • 支撑层
    支撑层用来完成MyBaits与数据库基本连接方式以及SQL命令与配置文件对应。包括:
    1. MyBatis与数据库连接方式管理
    2. MyBatis对事务管理方式
    3. 配置文件加载
    4. MyBatis查询缓存管理

二、Mybatis架构流程图

在这里插入图片描述

  • mybatis配置文件 SqlMapConfig.xml
    - 此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
    - Mapper.xml,此文件作为mybatis的sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
  • SqlSessionFactory
    通过mybatis环境等配置信息构造SqlSessionFactory,即会话工厂。
  • sqlSession
    通过会话工厂创建sqlSession即会话,程序员通过sqlsession会话接口对数据库进行增删改查操作。
  • Executor执行器
    mybatis底层自定义了Executor执行器接口来具体操作数据库,Executor接口有两个实现,一个是 基本执行器(默认)、一个是缓存执行器,sqlsession底层是通过executor接口操作数据库的。
  • Mapped Statement
    它也是Mybatis一个底层封装对象,它包装了Mybatis配置信息及sql映射信息等。Mapper.xml文件中一个select\insert\update\delete标签对应一个Mapped Statement对象,select\insert\update\delete标签的id即是Mapped Statement的id。
    1. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
    2. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通 过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc 编程中对结果的解析处理过程。

三、Mybatis调用流程图

在这里插入图片描述

  • SqlSession
    接收开发人员提供Statement Id 和参数.并返回操作结果
  • Executor
    MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
  • StatementHandler
    封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换 成List集合。
  • ParameterHandler
    负责对用户传递的参数转换成JDBC Statement 所需要的参数
  • ResultSetHandler
    负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
  • TypeHandler
    负责java数据类型和jdbc数据类型之间的映射和转换
  • MappedStatement
    维护了一条<select|update|delete|insert>节点的封装
  • SqlSource
    负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返 回BoundSql表示动态生成的SQL语句以及相应的参数信息
  • Configuration
    MyBatis所有的配置信息都维持在Configuration对象之中。

最后拓展一张Mapper代理执行原理图:
在这里插入图片描述

总结

要想写一个简易的Mybatis,那么就要了解Mybatis的架构、架构流程以及调用流程,这样在写代码的过程中不至于找不到入手点和连接关系,至于再细的内容就需要在代码中体现了。


青春短暂,我在路上
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值