zoukankan      html  css  js  c++  java
  • mybatis工作流程

    引言
    在mybatis的基础知识中我们已经可以对mybatis的工作方式窥斑见豹(参考:《MyBatis————基础知识》)。

    本片博客针对Mybatis内部工作原理进行阐述。

    一、Mybatis工作原理图
    mybatis 原理图如下所示:

     

    二、工作原理解析
    mybatis应用程序通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件(也可以用Java文件配置的方式,需要添加@Configuration)来构建SqlSessionFactory(SqlSessionFactory是线程安全的);

    然后,SqlSessionFactory的实例直接开启一个SqlSession,再通过SqlSession实例获得Mapper对象并运行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交,之后关闭SqlSession。

    说明:SqlSession是单线程对象,因为它是非线程安全的,是持久化操作的独享对象,类似jdbc中的Connection,底层就封装了jdbc连接。

    详细流程如下:

    1、加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。

    2、SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory,用来开启SqlSession。

    3、SqlSession对象完成和数据库的交互:
    a、用户程序调用mybatis接口层api(即Mapper接口中的方法)
    b、SqlSession通过调用api的Statement ID找到对应的MappedStatement对象
    c、通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象
    d、JDBC执行sql。

    e、借助MappedStatement中的结果映射关系,将返回结果转化成HashMap、JavaBean等存储结构并返回。

    mybatis层次图:

     

    原图:https://blog.csdn.net/xudan1010/article/details/53435018

    参考文章:

    《Mybatis实现原理深入解析》

    《Mybatis之工作原理》

    《mybatis加载顺序》

  • 相关阅读:
    磁盘管理之磁盘组成
    用户管理
    定时任务
    虚拟机安装centos6.9
    linux的文件属性与文件权限
    linux磁盘容量不足
    正则表达式与特殊符号
    linux三剑客与正则案例
    借用父构造函数继承属性
    myeclipse常用快捷键
  • 原文地址:https://www.cnblogs.com/cxxjohnson/p/14673391.html
Copyright © 2011-2022 走看看