今天我们来从一个全局的角度看看Mybatis。
本文主要内容:
Mybatis工作流程
Mybatis工作流程可以大致分为四个步骤:
下面我们就来说说这四个步骤:
触发条件:加载配置文件,比如:全局配置文件、XxxMapper.xml配置文件等。
配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。
触发条件:调用Mybatis提供的API
传入参数:为SQL的ID和传入参数对象
处理过程:将请求传递给下层的请求处理层进
行处理。
传入参数:为SQL的ID和传入参数对象
具体处理过程: (A)根据SQL的ID查找对应的MappedStatement对象。
(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
(E)释放连接资源。
将最终的处理结果返回。
Mybatis大致流程:
Mybatis实现原理
Mybatis底层还是采用原生jdbc来对数据库进行操作的,只是通过 SqlSessionFactory,SqlSession Executor,StatementHandler,ParameterHandler,ResultHandler和TypeHandler等几个处理器封装了这些过程。
执行器:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) 参数处理器:ParameterHandler (getParameterObject, setParameters) 结构处理器 ResultSetHandler (handleResultSets, handleOutputParameters) sql查询处理器:StatementHandler (prepare, parameterize, batch, update, query)
其中StatementHandler用通过ParameterHandler与ResultHandler分别进行参数预编译 与结果处理。而ParameterHandler与ResultHandler都使用TypeHandler进行映射。如下图:
MyBatis整体架构
Mybatis
的功能架构分为三层:
每一层对应详细内容:
API接口层
首先接口层是我们打交道最多的层,核心对象就是SqlSession,它是上层应用和Mybatis打交道的桥梁,也有的人称之为大门,SqlSession中定义了非常多的对数据库操作的方法,接口层在接受到调用请求时,会调用核心处理层的相应模块来完成具体的数据库操作。。
这一层主要就是跟数据库操作相关的动作都是在这数据处理层完成的。
核心处理层主要做了这4件事:
插件也属于核心层,这是由它的工作方式和拦截的对象决定的。
负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
MyBatis的主要成员
MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中。
作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能。
MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护。
封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等。
负责对用户传递的参数转换成JDBC Statement 所对应的数据类型。
负责将JDBC返回的ResultSet结果集对象转换成List类型的集合。
负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换。
MappedStatement维护一条<select|update|delete|insert>
节点的封装。
负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
表示动态生成的SQL语句以及相应的参数信息。
©著作权归作者所有:来自51CTO博客作者田维常老师的原创作品
运营过6个上百万抖音账号的大咖,一对一上门实战培训,包含两天的《抖音流量变现实战课》和(2天理论+1...
去看看>>今天这个教程颜值相当高,从色偏的角度,教同学们把皮肤修得白皙好看,特别适合妹子或有妹子的男生,附上高...
去看看>>“《連城》作品系列展出的各張攝影作品各具主題,但離不開中心主旨:琴澳關係。”鏡頭中的95後澳門青年攝...
去看看>>每个插画师的创作方式都不一样,有人喜欢将画面构思好了再动笔,而我比较喜欢从一堆杂乱的色彩和线条中理清...
去看看>>北京青年美術雙年展是立足北京、輻射京津冀、面向全國的綜合性青年藝術展示、學術交流、藝術家培養平台,是...
去看看>>官宏滔摄影作品、吴析夏三维装置作品展
去看看>>随着时代更迭、科技创新 人们的媒体生活不再平面 如今,我们以多面立体的生活方式 感受着这个瞬息万变的...
去看看>>这是一个忙碌而躁动的时代,我们每天都在接受海量信息的洗礼,而手机是我们接受信息冲击的最前线,每天都有...
去看看>>先阅读【开发工具】部分,确保开发环境可以编写代码并运行。然后学习【数据分析】或【Python小游戏开...
去看看>>