mybatis执行流程
目录
一、mybatis执行流程
二、Mybatis层次结构
三、Mybatis组件介绍
一、mybatis执行流程
1. 加载配置文件并初始化(SqlSession)
配置文件来源于两个地方,一个是配置文件(主配置文件conf.xml,mapper文件*.xml),一个是java代码中的注释,将sql的配置信息加载成为一个mappedstatement对象,存储在内存之中(包括传入参数的映射配置,结果映射配置,执行的sql语句)。
2. 接收调用请求
调用mybatis提供的api,传入的参数为sql的id(有namespase和具体sql的id组成)和sql语句的参数对象,mybatis将调用请求交给请求处理层。
3. 处理请求
根据sql的id找到对应的mappedstatament对象。
根据传入参数解析mappedstatement对象,得到最终要执行的sql。
获取数据库连接,执行sql,得到执行结果
Mappedstatement对象中的结果映射对执行结果进行转换处理,并得到最终的处理结果。
释放连接资源
4. 返回处理结果
二、Mybatis层次结构
三、Mybatis组件介绍
MyBatis的主要成员
- Configuration MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中
- SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能
SqlSession是一个接口,它有两个实现类:DefaultSqlSession(默认)和SqlSessionManager(弃用,不做介绍) SqlSession是MyBatis中用于和数据库交互的顶层类,通常将它与ThreadLocal绑定,一个会话使用一个SqlSession,并且在使用完毕后需要close SqlSession中的两个最重要的参数,configuration与初始化时的相同,Executor为执行器
- Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
Executor也是一个接口,他有三个常用的实现类BatchExecutor(重用语句并执行批量更新), ReuseExecutor(重用预处理语句prepared statements),SimpleExecutor(普通的执行器,默认)。
- StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等
- ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所对应的数据类型
- ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
- TypeHandler 负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换
- MappedStatement MappedStatement维护一条<select|update|delete|insert>节点的封装
作用: MappedStatement与Mapper配置文件中的一个select/update/insert/delete节点相对应。mapper中配置的标签都被封装到了此对象中,主要用途是描述一条SQL语句。 **初始化过程:**回顾刚开始介绍的加载配置文件的过程中, 会对mybatis-config.xml中的各个标签都进行解析, 其中有 mappers标签用来引入mapper.xml文件或者配置mapper接口的目录<select id="getUser" resultType="user" >select * from user where id=#{id}</select> 这样的一个select标签会在初始化配置文件时被解析封装成一个MappedStatement对象, 然后存储在Configuration对象的mappedStatements属性中, mappedStatements 是一个HashMap, 存储时key = 全限定类名 + 方法名,value = 对应的MappedStatement对象。
- SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
- BoundSql 表示动态生成的SQL语句以及相应的参数信息
以上主要成员在一次数据库操作中基本都会涉及,在SQL操作中重点需要关注的是SQL参数什么时候被设置和结果集怎么转换为JavaBean对象的,这两个过程正好对应StatementHandler和ResultSetHandler类中的处理逻辑。
mybatis执行流程相关推荐
- Mybatis执行流程分析_自定义简易Mybatis框架
自定义简易Mybatis框架 Mybatis执行流程分析 Mybatis代码编写流程: Mybatis配置文件加载过程: 需求分析及技术概述 根据上述的功能结构图, 得出如下需求: 1. 需要具有配置 ...
- Mybatis执行流程、缓存原理以及相关面试题
一.Mybatis执行流程 具体分析Mybatis是如何操作数据库的! . 1.定义我们的核心配置文件的路径,这个路径是从target/classes下开始找的! String config = &q ...
- Java-Mybatis(二): Mybatis配置解析、resultMap结果集映射、日志、分页、注解开发、Mybatis执行流程分析
Java-Mybatis-02 学习视频:B站 狂神说Java – https://www.bilibili.com/video/BV1NE411Q7Nx 学习资料:mybatis 参考文档 – ht ...
- 面试必问 | 聊聊MyBatis执行流程?
大家好,我是冰河~~ 随着互联网的发展,越来越多的公司摒弃了Hibernate,而选择拥抱了MyBatis.而且,很多大厂在面试的时候喜欢问MyBatis底层的原理和源码实现. 总之,MyBatis几 ...
- 云原生下的灰度体系建设,mybatis执行流程面试题
本篇文章,我们将继续为大家介绍 ASI SRE(ASI,Alibaba Serverless infrastructure,阿里巴巴针对云原生应用设计的统一基础设施) 是如何探索在 Kubernete ...
- MyBatis系列之浅谈SQL执行流程分析
目录 独立使用Mybatis Mybatis执行流程 SqlSessionFactory\SqlSession MapperProxy Excutor 独立使用Mybatis 这篇文章主要以分析Myb ...
- MyBatis(12) 源码解析之SQL执行流程
一.前言 资料 mybatis文档:https://mybatis.org/mybatis-3/index.html mybatis源码:https://github.com/mybatis/myba ...
- 深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)
原文地址:http://www.cnblogs.com/dongying/p/4142476.html 最近太忙了,一直没时间继续更新博客,今天忙里偷闲继续我的Mybatis学习之旅.在前九篇中,介绍 ...
- MyBatis 的执行流程,写得太好了!
来源 | blog.csdn.net/zwx900102/article/details/108455514 MyBatis可能很多人都一直在用,但是MyBatis的SQL执行流程可能并不是所有人都清 ...
最新文章
- SPOJ - BITDIFF: Bit Difference [神妙の预处理]
- 2-51单片机ESP8266学习-AT指令(开发板51单片机自动冷启动下载原理)
- 完全二叉树的结点个数
- animate中使用HTML5,animate.css怎么使用?
- 转载:CEO如何“养好CIO同时管好CIO”?
- java ttf_使用iText从* .ttf文件创建字体
- 33.MySQL高可用架构
- 拓端tecdat|探析大数据期刊文章研究热点
- Jxl实现Excel的导入与导出
- sam-ba_2.15 使用usb Device 连接AT91SAM9261EK开发板
- 有效管理“刺头”员工的方法
- 破解TA朋友圈“仅三天可见”
- 【装修大营救】装修失误郁闷到要吐血、追悔莫及:水电改、刷墙、橱柜
- Zabbix-agent部署
- 专著《Python与开源GIS:数据处理、空间分析》
- 计算机休眠后游戏,win10,win7玩游戏频繁进入睡眠模式,求解。
- 不要让回忆有负疚感——职业规划法则一
- 计算机机房的监控,机房动环监控解决方案
- sequelize 安装
- vue 数字滚动递增效果