架构
SQL执行
SQL语句的执行涉及多个组件,其中比较重要的是Executor、StatementHandler、ParameterHandler和ResultSetHandler。Executor主要负责维护一级缓存和二级缓存,并提供事务管理的相关操作,它会将数据库相关操作委托给StatementHandler完成。StatementHandler首先通过ParameterHandler完成SQL语句的实参绑定,然后通过java.sql.Statement对象执行SQL语句并得到结果集,最后通过ResultSetHandler完成结果集的映射,得到结果对象并返回
主要流程
- 加载配置并初始化
- 触发条件:加载配置⽂件
- 配置来源于两个地⽅,⼀个是配置⽂件(主配置⽂件conf.xml,mapper⽂件*.xml),—个是java代码中的注解,将主配置⽂件内容解析封装到Configuration,将sql的配置信息加载成为⼀个mappedstatement 对象,存储在内存之中
- 接收调⽤请求
- 触发条件:调⽤Mybatis提供的API
- 传⼊参数:为SQL的ID和传⼊参数对象
- 处理过程:将请求传递给下层的请求处理层进⾏处理。
- 处理操作请求
- 触发条件:API接⼝层传递请求过来
- 传⼊参数:为SQL的ID和传⼊参数对象
- 处理过程:
- 根据SQL的ID查找对应的MappedStatement对象。
- 根据传⼊参数对象解析MappedStatement对象,得到最终要执⾏的SQL和执⾏传⼊参数。
- 获取数据库连接,根据得到的最终SQL语句和执⾏传⼊参数到数据库执⾏,并得到执⾏结果。
- 根据MappedStatement对象中的结果映射配置对得到的执⾏结果进⾏转换处理,并得到最终的处理结果。
- 释放连接资源。
- 返回处理结果
配置解析器
DOM解析
DOM是基于树形结构的XML解析方式,它会将整个XML文档读入内存并构建一个DOM树,基于这棵树形结构对各个节点(Node)进行操作,因此当节点多时候比较耗资源