mybatis执行流程

  1. JDBC执行流程回顾

    • JBDC的底层主要是三个接口对象:Connection、Statement、ResultSet。
    • Connection用于建立与数据库的连接,Statement用于向数据库发送sql语句,ResultSet用于封装sql查询语句的结果。

    JDBC操作数据库主要步骤:

    • 注册驱动
      使用 Class.forName() 方法加载数据库驱动程序类。
    • 获取连接对象
      JDBC的底层其实是使用Socket进行连接数据库的。
    • 执行SQL语句,返回执行结果
      通过获取Statement实例执行SQL语句。
    • 处理执行结果
      最后返回的结果集是ResultSet。
    • 释放资源
  2. mybatis执行流程

    • 读取MyBatis的核心配置文件,这个核心配置文件最终会被封装成一个Configuration对象;
    • 加载映射文件,常见的配置的方式有两种,一种是package扫描包,一种是mapper找到配置文件的位置。
    • 构造会话工厂获取SqlSessionFactory,用建造者设计模式使用SqlSessionFactoryBuilder对象构建的,SqlSessionFactory的最佳作用域是应用作用域。
    • 创建会话对象SqlSession,SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
    • Executor执行器,是MyBatis的核心,负责SQL语句的生成和查询缓存的维护,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。
    • MappedStatement对象,MappedStatement是对解析的SQL的语句封装,一个MappedStatement代表了一个sql语句标签。
    • 输入参数映射,输入参数类型可以是基本数据类型,也可以是Map、List、POJO类型复杂数据类型,这个过程类似于JDBC的预编译处理参数的过程,有两个属性 parameterType和parameterMap
    • 封装结果集。可以封装成多种类型可以是基本数据类型,也可以是Map、List、POJO类型复杂数据类型。
  3. Mybatis的mapper为啥只有接口没有实现类,也能工作,主要是由于动态代理。

    • Mapper接口与XML的关联:
      • Mybatis初始化时,会解析XML配置文件,将里面定义的SQL语句与Mapper接口的方法建立映射关系,并保存在配置对象中。
    • 动态代理的创建:
      • 当我们调用SqlSession.getMapper()方法时,Mybatis使用Java动态代理机制,为Mapper接口创建代理对象。
      • 代理对象的创建,主要通过MapperProxyFactory类来完成。
    • 调用代理对象的方法时的内部处理:
      • 当调用Mapper接口中的方法时,实际上调用的是代理对象的invoke方法。
      • 在invoke方法中,Mybatis使用之前的映射关系,找到与方法对应的SQL语句。
    • SQL语句的执行:
      • 找到SQL语句后,Mybatis会调用底层的执行器(Executor)来执行SQL语句,并完成参数的绑定,查询,以及结果返回。

参考:https://blog.csdn.net/qq_51634677/article/details/131458267

posted @ 2024-05-10 20:32  Hanyta  阅读(3)  评论(0编辑  收藏  举报