天天看点

Mybatis运行原理解析前言:mybatis的功能构架:运行流原理:

前言:

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

mybatis的功能构架:

Mybatis运行原理解析前言:mybatis的功能构架:运行流原理:
  1. API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
  2. 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
  3. 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

运行流原理:

Mybatis运行原理解析前言:mybatis的功能构架:运行流原理:
  1. 加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,将SQL的配置信息Mapper.xml加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。其对应着<select | update | delete | insert>标签项。此文件需要在SqlMapConfig.xml中加载。
  2. SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory,用来开启SqlSession。(工厂模式)
  3. SqlSession对象完成和数据库的交互:
    • 用户程序调用mybatis接口层api(即Mapper接口中的方法)
    • SqlSession通过调用api的Statement ID找到对应的MappedStatement对象(MappedStatement是mybatis一个底层封装对象,它保障了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement独享,sql的id就是mapped statement的id。)
    • 通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象
    • JDBC执行sql。
    • 借助MappedStatement中的结果映射关系,将返回结果转化成HashMap、JavaBean等存储结构并返回。
  4. 关闭SqlSession。