【Mybatis】- 框架架构

Mybatis怎么理解

借用官网的介绍:java

MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.程序员

总的来讲能够分为三部分sql

  1. 是一个支持自定义SQL,存储过程和高级映射的持久性框架;
  2. 几乎消除了全部JDBC代码和手动设置参数以及检索结果。
  3. 可使用简单的XML或Annotations来配置和映射基元,Map接口和Java POJO(Plain Old Java Objects)到数据库记录

框架

      

这是Mybatis最经典的架构图,如何理解这幅图呢?数据库

  1. 首先映入眼帘的是红色的Configuration对象,这个对象是将mybatis配置文件,mapper文件,以及java代码注解封装成了一个总体。
  2. 而后会和mapper接口进行关联;
  3. 接着当mapper接口接受到调用请求,会接收到传入SQL的ID和传入对象(也就是左边的三个“轮子”),mybatis会根据sql的id找到对应的MapperStatement(一个sql就是一个statement)并进行解析,解析后获得最终要执行的sql。 经过mapper Statements进行操做
  4. 而后将获得的sql和参数拿到数据库去执行,获得最终的结果,而后将获得的结果按映射的配置,转换为右边的三个“轮子”,输出。

具体执行过程

  1. 首先咱们须要Mybatis的全局配置文件sqlMapConfig.xml以及映射文件Mapper.xml,这两类文件在程序初始化时会读取到框架图中的Configuration对象中,进行封装处理。
  2. 而后会经过Configuration对象来建立SqlSessionFactory回话工厂;
  3. 接着经过SqlSessionFactory回话工厂建立sqlSession。sqlSession是面向程序员的接口,程序员能够经过sqlSession操做数据库。
  4. 而后调用sqlSession的方法去操做数据库,若是须要提交事务,须要执行sqlSession的commit()方法;

对sqlSession的理解

上边的执行过程,能够抽象成这幅图,这幅图看起来就简介不少。咱们能够看到,以sqlSession为界,分为了两部分:mybatis

  1. 从Configuration到SqlSession能够成为操做手册或者配置,控制着mybatis的初始化,以及sqlSession的走向;
  2. 从SqlSession到DB能够成为操做DB部分,这部分是如何操做数据库,以及对jdbc的封装处理。
  3. 因此,SqlSession能够理解为一个承上启下的功能,对上是如何建立sqlSession并指导SqlSession如何操做,对下是SqlSession的具体操做。

sqlSession承上启下的做用,咱们能够经过代码来瞅瞅:架构

sqlSession类里注入了两个对象,一个是configuration,一个是executor。为何要注入这两个对象呢?由于configuration包含全部配置,能够指导sqlSession的执行过程,而executor能够代替sqlSession来执行sql。app

因此上一幅图还能够抽象成这样:框架

如何有这幅图来理解mybatis的运做流程呢?只须要解决下面三个问题便可:学习

  1. sqlSession是如何产生的?以及xml是怎么对应到configuration的?sqlSession如何获取
  2. mapper接口和maper.xml是怎么映射起来的?mapper接口和mapper文件如何映射
  3. mapper接口是如何操做数据库的?mapper接口如何操做数据库

结语

对于mybatis的理解,最后咱们能够浓缩为这样一幅图。看书的时候,咱们常常说,一本书从厚看薄了,再从薄看厚了,就是真的领悟。学习框架也是同样,从一个完整的框架浓缩为一张简单的uml图,再从一张简单的uml图扩展为完整的框架,那么咱们就真的掌握了这个框架。.net