深入了解Mybatis架构设计
架构设计
我们可以把Mybatis的功能架构分为三层: API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
Mybatis和数据库的交互有两种方式: 使用传统的Mybatis提供API 使用Mapper代理的方式 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。他主要的目的是根据调用的请求完成一次数据库操作。 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来最为基础组件。为上层的数据处理层提供最基础的支撑。
Mybatis主要构件
总体流程: 加载配置并初始化
配置来源于两个地方,一个是配置文件(conf.xml,mapper*.xml),一个是java代码中的注解,将配置文件内容封装到Configuration,将sql的配置信息加载成为一个mappedstatement对象,存储在内存中。
2. 接收调用请求
触发条件:调用Mybatis提供的API
传入参数:为SQL的ID和传入的参数
将请求传递给下层的请求处理层进行处理 处理操作请求 根据SQL的ID查找对应的MappedStatement对象 根据传入参数对象解析,得到最终要执行的SQL和执行传入参数 获取数据库连接,将最终SQL语句和参数给到数据库执行,并得到执行结果 根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果 释放连接资源 返回处理结果 Mybatis缓存
Mybatis有一级缓存和二级缓存。Mybatis收到查询请求后首先会查询二级缓存,若二级缓存未命中,再去查询一级缓存,一级缓存没有,再查询数据库。
一级缓存 public List query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException { ErrorContext.instance().resource(ms.getResource()).activity("executing a query").object(ms.getId()); if (closed) { throw new ExecutorException("Executor was closed."); } if (queryStack == 0 && ms.isFlushCacheRequired()) { clearLocalCache(); } List list; try { queryStack++; //从localCache缓存里查数据,没有就去查数据库 list = resultHandler == null ? (List) localCache.getObject(key) : null; if (list != null) { handleLocallyCachedOutputParameters(ms, key, parameter, boundSql); } else { list = queryFromDatabase(ms, parameter, rowBounds, resultHandler, key, boundSql); } } finally { queryStack--; } if (queryStack == 0) { for (DeferredLoad deferredLoad : deferredLoads) { deferredLoad.load(); } // issue #601 deferredLoads.clear(); if (configuration.getLocalCacheScope() == LocalCacheScope.STATEMENT) { // issue #482 clearLocalCache(); } } return list; }
这个localCache是BaseExecutor里面的一个属性 public abstract class BaseExecutor implements Executor { protected PerpetualCache localCache;
PerpetualCache类 public class PerpetualCache implements Cache { private final String id; private Map
江苏科技创新专项资金项目即将启动光伏在内1月10日,江苏省科学技术厅发文称,去年11月上旬,省科技厅面向全省发布了2021年度省碳达峰碳中和科技创新专项资金项目指南。目前,省科技厅已完成首批项目的组织申报项目受理专家评审
交通运输部将引导19。61亿元社会资金投入交通运输科技研发来源人民网原创稿人民网北京1月10日电(记者王连香)近日,交通运输部公布2021年度交通运输行业重点科技项目清单,共有288个项目入选,将引导19。61亿元社会资金投入交通运输科技
FITURE携手天美健康,用交互科技助推全民健身发展中国青年报客户端讯(中青报中青网记者谢宛霏)近日,智能健身独角兽生活方式品牌FITURE与天美工作室群旗下专注运动健康领域的子品牌天美健康,举办了天美健康局开局先开练战略合作发布会
千元高性价比机型?说到高性价比的手机,相信不少的消费者会想起小米旗下的子品牌红米,作为较早创立的一家子品牌厂商,较早地提出了性价比这个口号的品牌,从此让消费者们记住了这个独具性价比的品牌,让我们的选
通网只是农村地区互联网建设的第一步新闻随笔作者陈城近日,中国互联网络信息中心发布了第48次中国互联网络发展状况统计报告(以下简称报告)。该报告显示,截至2021年6月,我国农村网民规模为2。97亿,农村地区互联网普
戏说中国互联网5大巨头宝哥说这些看法不一定正确,但一定好玩。本文概述当企业做大做强之后,人们对他们的看法,也会逐渐变得复杂割裂,甚至措辞激烈。当然,这些看法不一定正确,但一定好玩。今天,我们将对阿里腾讯
EUV也困不住中国芯了?新方向被确认,中科院立功了本文原创,禁止搬运和抄袭,违者必究!硅基是国际主流的芯片材料,在长达半个世纪的发展历程中,市面上所有的通用CPU,GPU等处理器都是以硅作为核心材料。但是摩尔定律即将到达极限,这时
全球连线中国西部普通消费者沉浸式体验5G创新应用视频加载中8月初,在地处中国西北的甘肃省兰州市,由中国移动通信集团甘肃有限公司投资建设的甘肃5G联合创新中心正式建成投用。这个面积约1500平方米的创新中心不仅向普通用户系统展示了
家里的WIFI信号时断时续,工作人员真正来检查说没毛病,是为什么呢?本行业问题,我来回答。家里wifi信号时段时续,工作人员来检查的时候说没毛病,这里可以比较肯定的是你说的工作人员是三大运营商宽带的装机员,他们不管无线,只负责光猫部分,因为这段没毛
我与收音机会这样厮守下去最近迷上了网络收音机,听书听小说用朝元,听国际电台用海弦,有人说这叫傻瓜机简单有效,有人说这东西可能会昙花一现还会持币观望,还有人说老金这是掉进网络收音机堆里无法自拔了吗?海弦wr
苹果iOS15Beta7体验5项更新,3个修复和小问题,使用稳定大家好,我是氪哥。本想更拿iPhone12做最新一期的测试,但是无奈一共要做三个系统才有参考性(iOS14。7。115Beta两个),所以还是没有那么快出结果。这期iOS15Bet