Mybatis下的九种设计模式

CANape快速上手 文章帮助记录CANape学习过程。 阅读详情

Mybatis至少遇到了以下的设计模式的使用:
1、Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;
2、工厂模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;
3、单例模式,例如ErrorContext和LogFactory;
4、代理模式,Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;
5、组合模式,例如SqlNode和各个子类ChooseSqlNode等;
6、模板方法模式,例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler;
7、适配器模式,例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;
8、装饰者模式,例如Cache包中的cache.decorators子包中等各个装饰者的实现;
9、迭代器模式,例如迭代器模式PropertyTokenizer;

接下来挨个模式进行解读,先介绍模式自身的知识,然后解读在Mybatis中怎样应用了该模式。

1、Builder模式

Builder模式的定义是“将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。”,它属于创建类模式。
一般来说,如果一个对象的构建比较复杂,超出了构造函数所能包含的范围,就可以使用工厂模式和Builder模式。
相对于工厂模式会产出一个完整的产品,Builder应用于更加复杂的对象的构建,甚至只会构建产品的一个部分。
在这里插入图片描述

在Mybatis环境的初始化过程中,SqlSessionFactoryBuilder会调用XMLConfigBuilder读取所有的MybatisMapConfig.xml和所有的*Mapper.xml文件,构建Mybatis运行的核心对象Configuration对象,然后将该Configuration对象作为参数构建一个SqlSessionFactory对象。
其中XMLConfigBuilder在构建Configuration对象时,也会调用XMLMapperBuilder用于读取*Mapper文件,而XMLMapperBuilder会使用XMLStatementBuilder来读取和build所有的SQL语句。
在这个过程中,有一个相似的特点,就是这些Builder会读取文件或者配置,然后做大量的XpathParser解析、配置或语法的解析、反射生成对象、存入结果缓存等步骤,这么多的工作都不是一个构造函数所能包括的,因此大量采用了Builder模式来解决。
对于builder的具体类,方法都大都用build*开头,比如SqlSessionFactoryBuilder为例,它包含以下方法:

在这里插入图片描述
即根据不同的输入参数来构建SqlSessionFactory这个工厂对象。

2、工厂模式

在Mybatis中比如SqlSessionFactory使用的是工厂模式,该工厂没有那么复杂的逻辑,是一个简单工厂模式。
简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。
在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

在这里插入图片描述
SqlSession可以认为是一个Mybatis工作的核心的接口,通过这个接口可以执行执行SQL语句、获取Mappers、管理事务。类似于连接MySQL的Connection对象。

在这里插入图片描述
可以看到,该Factory的openSession方法重载了很多个,分别支持autoCommit、Executor、Transaction等参数的输入,来构建核心的SqlSession对象。
在DefaultSqlSessionFactory的默认工厂实现里,有一个方法可以看出工厂怎么产出一个产品:
在这里插入图片描述
这是一个openSession调用的底层方法,该方法先从configuration读取对应的环境配置,然后初始化TransactionFactory获得一个Transaction对象
然后通过Transaction获取一个Executor对象,最后通过configuration、Executor、是否autoCommit三个参数构建了SqlSession。
在这里其实也可以看到端倪,SqlSession的执行,其实是委托给对应的Executor来进行的。
而对于LogFactory,它的实现代码:
在这里插入图片描述
这里有个特别的地方,Log变量的的类型是Constructorextends Log>
也就是说该工厂生产的不只是一个产品,而是具有Log公共接口的一系列产品,比如Log4jImpl、Slf4jImpl等很多具体的Log。

3、单例模式

单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。

单例模式的要点有三个:
一是某个类只能有一个实例;
二是它必须自行创建这个实例;
三是它必须自行向整个系统提供这个实例。

单例模式是一种对象创建型模式,单例模式又名单件模式或单态模式。

在这里插入图片描述
在Mybatis中有两个地方用到单例模式,ErrorContext和LogFactory,其中ErrorContext是用在每个线程范围内的单例,用于记录该线程的执行环境错误信息
而LogFactory则是提供给整个Mybatis使用的日志工厂,用于获得针对项目配置好的日志对象。
ErrorContext的单例实现代码:
在这里插入图片描述
构造函数是private修饰,具有一个static的局部instance变量和一个获取instance变量的方法,在获取实例的方法中,先判断是否为空如果是的话就先创建,然后返回构造好的对象。
只是这里有个有趣的地方是,LOCAL的静态实例变量使用了ThreadLocal修饰,也就是说它属于每个线程各自的数据,而在instance()方法中,先获取本线程的该实例,如果没有就创建该线程独有的ErrorContext。

4、代理模式

代理模式可以认为是Mybatis的核心使用的模式,正是由于这个模式,我们只需要编写Mapper.java接口,不需要实现,由Mybatis后台帮我们完成具体SQL的执行。
代理模式(Proxy Pattern) :给某一个对象提供一个代 理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式。
代理模式包含如下角色:

Subject: 抽象主题角色
Proxy: 代理主题角色
RealSubject: 真实主题角色

在这里插入图片描述
在这里插入图片描述

这里有两个步骤,第一个是提前创建一个Proxy,第二个是使用的时候会自动请求Proxy,然后由Proxy来执行具体事务;
当我们使用Configuration的getMapper方法时,会调用mapperRegistry.getMapper方法,而该方法又会调用mapperProxyFactory.newInstance(sqlSession)来生成一个具体的代理:
在这里插入图片描述
在这里,先通过T newInstance(SqlSession sqlSession)方法会得到一个MapperProxy对象,然后调用T newInstance(MapperProxymapperProxy)生成代理对象然后返回。
而查看MapperProxy的代码,可以看到如下内容:
在这里插入图片描述
非常典型的,该MapperProxy类实现了InvocationHandler接口,并且实现了该接口的invoke方法。
通过这种方式,我们只需要编写Mapper.java接口类,当真正执行一个Mapper接口的时候,就会转发给MapperProxy.invoke方法
而该方法则会调用后续的sqlSession.cud>executor.execute>prepareStatement等一系列方法,完成SQL的执行和返回。

5、组合模式

组合模式组合多个对象形成树形结构以表示“整体-部分”的结构层次。
组合模式对单个对象(叶子对象)和组合对象(组合对象)具有一致性,它将对象组织到树结构中,可以用来描述整体与部分的关系。
同时它也模糊了简单元素(叶子对象)和复杂元素(容器对象)的概念,使得客户能够像处理简单元素一样来处理复杂元素,从而使客户程序能够与复杂元素的内部结构解耦。

在使用组合模式中需要注意一点也是组合模式最关键的地方:叶子对象和组合对象实现相同的接口。这就是组合模式能够将叶子节点和对象节点进行一致处理的原因。

在这里插入图片描述

Mybatis支持动态SQL的强大功能,比如下面的这个SQL:
在这里插入图片描述
在这里面使用到了trim、if等动态元素,可以根据条件来生成不同情况下的SQL;
在DynamicSqlSource.getBoundSql方法里,调用了rootSqlNode.apply(context)方法,apply方法是所有的动态节点都实现的接口:
在这里插入图片描述
对于实现该SqlSource接口的所有节点,就是整个组合模式树的各个节点:

在这里插入图片描述
组合模式的简单之处在于,所有的子节点都是同一类节点,可以递归的向下执行,比如对于TextSqlNode,因为它是最底层的叶子节点,所以直接将对应的内容append到SQL语句中:
在这里插入图片描述
但是对于IfSqlNode,就需要先做判断,如果判断通过,仍然会调用子元素的SqlNode,即contents.apply方法,实现递归的解析。
在这里插入图片描述

6、模板方法模式

模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。
模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。
代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。
模板类定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
在这里插入图片描述

在Mybatis中,sqlSession的SQL执行,都是委托给Executor实现的,Executor包含以下结构:

在这里插入图片描述
其中的BaseExecutor就采用了模板方法模式,它实现了大部分的SQL执行逻辑,然后把以下几个方法交给子类定制化完成:
在这里插入图片描述
该模板方法类有几个子类的具体实现,使用了不同的策略:
简单SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。(可以是Statement或PrepareStatement对象)

重用ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map内,供下一次使用。(可以是Statement或PrepareStatement对象)

批量BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理的;BatchExecutor相当于维护了多个桶,每个桶里都装了很多属于自己的SQL,就像苹果蓝里装了很多苹果,番茄蓝里装了很多番茄,最后,再统一倒进仓库。(可以是Statement或PrepareStatement对象)

比如在SimpleExecutor中这样实现update方法:
在这里插入图片描述

7、适配器模式

适配器模式(Adapter Pattern) :将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。
适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

在这里插入图片描述
在Mybatsi的logging包中,有一个Log接口:
在这里插入图片描述
该接口定义了Mybatis直接使用的日志方法,而Log接口具体由谁来实现呢?
Mybatis提供了多种日志框架的实现,这些实现都匹配这个Log接口所定义的接口方法,最终实现了所有外部日志框架到Mybatis日志包的适配:

在这里插入图片描述
比如对于Log4jImpl的实现来说,该实现持有了org.apache.log4j.Logger的实例,然后所有的日志方法,均委托该实例来实现。
在这里插入图片描述

8、装饰者模式

装饰模式(Decorator Pattern) :动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活。
其别名也可以称为包装器(Wrapper),与适配器模式的别名相同,但它们适用于不同的场合。
根据翻译的不同,装饰模式也有人称之为“油漆工模式”,它是一种对象结构型模式。

在这里插入图片描述
在mybatis中,缓存的功能由根接口Cache(org.apache.ibatis.cache.Cache)定义。整个体系采用装饰器设计模式,数据存储和缓存的基本功能由PerpetualCache(org.apache.ibatis.cache.impl.PerpetualCache)永久缓存实现,然后通过一系列的装饰器来对PerpetualCache永久缓存进行缓存策略等方便的控制。
如下图:

在这里插入图片描述

用于装饰PerpetualCache的标准装饰器共有8个(全部在org.apache.ibatis.cache.decorators包中):
1、FifoCache:先进先出算法,缓存回收策略
2、LoggingCache:输出缓存命中的日志信息
3、LruCache:最近最少使用算法,缓存回收策略
4、ScheduledCache:调度缓存,负责定时清空缓存
5、SerializedCache:缓存序列化和反序列化存储
6、SoftCache:基于软引用实现的缓存管理策略
7、SynchronizedCache:同步的缓存装饰器,用于防止多线程并发访问
8、WeakCache:基于弱引用实现的缓存管理策略

另外,还有一个特殊的装饰器TransactionalCache:事务性的缓存
正如大多数持久层框架一样,mybatis缓存同样分为一级缓存和二级缓存
一级缓存,又叫本地缓存,是PerpetualCache类型的永久缓存,保存在执行器中(BaseExecutor),而执行器又在SqlSession(DefaultSqlSession)中,所以一级缓存的生命周期与SqlSession是相同的。
二级缓存,又叫自定义缓存,实现了Cache接口的类都可以作为二级缓存,所以可配置如encache等的第三方缓存。二级缓存以namespace名称空间为其唯一标识,被保存在Configuration核心配置对象中。
二级缓存对象的默认类型为PerpetualCache,如果配置的缓存是默认类型,则mybatis会根据配置自动追加一系列装饰器。

Cache对象之间的引用顺序为:
SynchronizedCache–>LoggingCache–>SerializedCache–>ScheduledCache-LruCache–>PerpetualCache

9、迭代器模式

迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。

在这里插入图片描述
Java的Iterator就是迭代器模式的接口,只要实现了该接口,就相当于应用了迭代器模式:
在这里插入图片描述

比如Mybatis的PropertyTokenizer是property包中的重量级类,该类会被reflection包中其他的类频繁的引用到。这个类实现了Iterator接口,在使用时经常被用到的是Iterator接口中的hasNext这个函数。

在这里插入图片描述
在这里插入图片描述
可以看到,这个类传入一个字符串到构造函数,然后提供了iterator方法对解析后的子串进行遍历,是一个很常用的方法类。

文章来源:
https://juejin.im/post/5d01f0e4f265da1bc23f726a

huggingface下载提示huggingface_hub.errors.EntryNotFoundError:404 Client Error: (Request 1D: Root...如何解决? 🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。 阅读详情

相关推荐

PPO算法详解:基于CartPole-v1的强化学习实现

PPO算法详解:基于CartPole-v1的强化学习实现

m0_54720701的博客 863

SSM源码分析之23种设计模式(单例模式与原型模式)

23种设计模式之单例模式与原型模式前言 前言 单例模式(一个类模板,在整个系统执行过程中,只允许产生一个实例)应用广泛,主要 应用在: 配置文件 Ioc容器 日历 工厂本身 单例模式,解决一个并发访问的时候线程安全问题,保证单例的技术方案有很多种 饿汉式 在实例使用之前,不管你用不用,我都先new出来再说,避免了线程安全问题 懒汉式、 默认加载的时候不实例化,在需要用到这个实例的时候进...

✎ℳ๓₯㎕...雲淡風輕 927

半导体测试(一)

探针台是一种用于在晶圆上进行配合探针卡进行电路量测的设备,在测试过程中,探针工作站会将探针与晶圆上的每个die进行接触,以进行电性测量。在这个过程中,每个die都被测试以确保它能基本满足器件的特征或设计规格书(Specification),通常包括电压、电流、时序和功能的验证。晶圆是一个圆形的硅片,在这个半导体的基础之上,建立了许多独立的单个的电路;在所有的die都被探测(Probed)之后,晶圆被切割成独立的dice,这就是常说的die saw,所有被标示为失效的die都被报废,。

m0_37606066的博客 8423

Java SSM项目运用策略模式思想

1. 策略模式简介 策略模式(Strategy Pattern)中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变更和替换独立于使用算法的客户。 策略模式中体现了如下几种设计原则: 针对接口编程,而不是具体的实现类(定义了一个策略组接口) 使用组合/聚合的方式代替继承(StrategyContext类与策略组容器就是组合关系) 把变化的代码从不变的代码中分离...

qq_36437218的博客 629

Docker+vLLM内网离线部署Qwen3 流程

本文介绍了在CentOS 7系统下进行VLLM容器化部署Qwen3-32B大模型的内网离线方案。首先需准备Nvidia显卡驱动、CUDA 12.4和Docker环境。通过联网机器拉取vllm/vllm-openai镜像并导入内网服务器,同时从魔塔社区下载模型文件。部署时使用docker run命令启动容器,配置了GPU资源、内存共享、端口映射等参数,特别指定了模型路径、并行计算、内存利用率等关键参数。该方案实现了大模型在内网环境的安全高效部署,适用于需要离线运行的AI推理场景。

qq_42881308的博客 1036

告别WSL:Ollama Windows原生部署与GPU加速实战

本文详细介绍了Ollama在Windows系统上的原生部署与GPU加速实战指南。告别WSL,通过官方原生应用直接调用NVIDIA和AMD显卡,实现更高效的本地大模型运行。文章涵盖系统准备、三步安装、模型拉取运行、GPU性能优化及高级配置,为Windows AI开发者提供一站式解决方案。

prometheus9mon的博客 532

SSM框架中用到的设计模式-动态代理and责任链模式

SSM框架中用到的设计模式-动态代理and责任链模式 动态代理模式和责任链模式 代理对象 ​ 通过一张图说明: ​ 在软件公司中,客户不会直接找到公司的软件工程师,而是通过商务,和商务谈判,此时的软件工程师是不需要处理谈判的内容,此处的商务就是代理的对象,他代理了软件工程师谈判。 ​ 在真实对象(软件工程师)访问之前或之后加入对应逻辑,或其他规则控制是否使用真实对象。 ​ 三者的关系:客户(调用者) , 商务(代理对象),软件工程师(真实对象) 常用的动态代理 ​ 一般最常用的动态代理分为两种:一

weixin_43958223的博客 515

DDoS攻击--Syn_Ack/Ack_Flood等攻击防护详解(TCP)

前言 Syn_Ack/Ack_Flood攻击属于TCP攻击,在了解Syn_Ack/Ack_Flood攻击之前,可以先看看TCP攻击详解。 Syn_Ack Flood 攻击: syn_ack报文出现在连接建立的第2个报文,用来确认第一次握手的syn包。 当服务器收到syn_ack报文后会在系统里查询是否属于3次握手的范畴。如果属于则回复ack,并将连接设为连接状态。若没有查到相关信息,则回复...

一只IT小小鸟 1万+

spring中用到的设计模式

spring中用到的设计模式: 1.工厂设计模式 Spring使用工厂模式可以通过 BeanFactory 或 ApplicationContext 创建 bean 对象。 前者需要时创建bean,内存占用少,后者一次性创建所有的bean,内存消耗大,并且提供扩展功能。 ApplicationContext的实现类:ClassPathXmlApplication 2.单例设计模式 有一些对象其实...

fujianmin19910915的博客 361

【电击防护篇】电击防护技术详解:从人体效应到接地系统全解析

本文系统讲解了电击防护的关键知识,包括电流对人体的影响(如30mA是心室颤动阈值)、人体电阻特性(700Ω-6100Ω)以及电气接触防护措施。重点分析了TT、TN和IT三大接地系统的结构特点与应用场景,强调TN-S系统最安全,IT系统供电连续性最佳。详细介绍了漏电保护器(RCD)的工作原理与选型指南,建议人身防护选用30mA高灵敏度RCD。文章通过对比表总结三大系统的安全性、成本及适用场景,为电气安全设计提供实用参考。

2301_81299416的博客 1742

基于Codex平台与AI Agent技能开发,实现抖音爆款视频分析与脚本自动生成

大家好,我是专注于AI应用开发的技术博主。最近在探索如何利用AI工具自动化内容创作时,我发现了一个非常有趣的组合:通过Codex平台创建自定义的Skill(技能),来批量分析抖音平台的爆款视频,并基于分析结果自动生成新的带货视频脚本。这听起来像是内容团队的“黑科技”,但实现起来其实有清晰的路径可循。本文将为你完整拆解这个实战项目,从环境搭建、Skill编写、数据抓取到视频脚本生成,手把手教你打造自己的“AI内容助理”。无论你是想了解AI Agent的开发,还是对短视频自动化创作感兴趣,都能从本文中获得可直接

weixin_34110749的博客 644

SSM涉及到的设计模式与动态代理技术

《JavaEE 互联网轻量级框架整合开发》第 2 章讲解的是SSM框架的前置知识:设计模式 本章重点包含: 1.反射技术 之前写过一篇:博客链接 包含了: Class类的使用 动态加载类 方法信息的反射 获取成员变量&构造函数 方法反射的基本操作 通过反射了解集合泛型的本质 2.动态代理、责任链模式 以及拦截器的概念 3.观察者模式 4.工厂模式和抽象工厂模式 5.Builder(...

weixin_30723433的博客 357

代谢组数据分析(四):多种差异分析方法筛选代谢物标记物

本文详细介绍了代谢组学中常用的差异分析方法,包括倍数变化法、T检验、VIP值在OPLS-DA中的应用。通过这些方法,研究者能够筛选出在不同组别间具有显著差异的代谢物,为疾病诊断和治疗提供线索。文章还提供了一个整合的R函数run_metabolomeDA,便于研究人员进行一站式差异分析,并展示了如何生成火山图来可视化结果。

专注生信领域 6768

MyBatis 中的九种设计模式!

点击蓝色“架构文摘”关注我哟加个“星标”,每天上午 09:25,干货推送!来源 |http://www.crazyant.net/2022.html虽然我们都知道有26个设计模式,但是...

架构文摘 243

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

MyBatis 中的九种设计模式

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!来源 |http://www.crazyant.net/2022.html虽然我们都知道有26个设计模式...

程序猿DD 1112

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

中怎么构建ebug模式_MyBatis 中的九种设计模式!

点击蓝色“架构文摘”关注我哟加个“星标”,每天上午 09:25,干货推送!来源 |http://www.crazyant.net/2022.html虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。Mybatis至少遇到了以下的设计模式的使用:Builder...

weixin_36369259的博客 75

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

高级java每日一道面试题-2025年01月19日-框架篇[Mybatis篇]-MyBatis 中见过什么设计模式 ?

工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式,将对象创建过程抽象化,从而提高代码的可维护性和灵活性。

qq_43071699的博客 1477

MyBatis-设计模式

MyBatis框架中广泛应用了多种设计模式以提高灵活性和可维护性,包括构建者模式(SqlSessionFactoryBuilder)、工厂模式(SqlSessionFactory)、代理模式(MapperProxy)、模板方法模式(BaseExecutor)等。这些模式组合使用实现了核心功能的稳定扩展。同时,针对SQL片段复用不足等问题,MyBatis提供了<sql>标签等解决方案。框架设计遵循面向对象原则,如单一职责原则(分离Mapper接口)和开闭原则(插件机制)。示例展示了工厂方法模

d464858的博客 914

Mybatis 使用的 9 种设计模式,真是太有用了

来源:crazyant.net/2022.html1、Builder模式2、工厂模式3、单例模式4、代理模式5、组合模式6、模板方法模式7、适配器模式8、装饰者模式9、迭代器模式虽然我们都...

欢迎关注公众号:【码农突围】,回复9999,可以获取一份LeetCode刷题笔记 262

Mybatis设计模式

mybatis中使用到的设计模式 Mybatis 使用的 9 种设计模式 建造者模式(Configuration) 构造者模式的定义是“将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。”,它属于创建类模式,一般来说,如果一个对象的构建比较复杂,超出了构造函数所能包含的范围,就可以使用工厂模式和Builder模式,相对于工厂模式会产出一个完整的产品,Buil...

175

【设计模式】Mybatis 中9种经典的设计模式

虽然我们都知道有23个设计模式,但是大多停留在概念层面,真实开发中很少遇到。Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。 Mybatis至少遇到了以下的设计模式的使用: Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder; 工厂模式,例如SqlSessionFactory、ObjectFa

天天新知 417

MyBatis 中的 9 种设计模式及其代码示例

定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

s8305057的博客 1002

【设计模式系列】1.设计模式概述

目录一、什么是设计模式?1、概念2、六大设计原则二、设计模式有哪些优点?三、JDK中常用的设计模式概述四、常用框架有关的设计模式(重点)1、Spring框架常用的设计模式①.单例模式②.工厂模式③.模板模式④.代理模式⑤.装饰器模式⑥.适配器模式⑦.观察者模式2、Mybatis框架常用的设计模式参考 一、什么是设计模式? 1、概念 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结; 一共有23种设计模式,总体来说可以分为三大类:创建型模式( Creational Patterns )、结

小确幸的博客 252

了解MyBatis框架

MyBatis MyBatis前身是iBatis,最初侧重于码软件开发,后续发展称为一款基于java的持久层框架。 MyBatis可以使用简单的XML或者注解进行映射和配置,通过将参数映射到配置的SQL最终解析为执行的SQL语句,查询后将SQl结果集映射成java对象返回。 MyBatis提供的持久层框架包括SQL Maps(Mapper)和Data Access Objects(DAO),相对于Hibernate而言它提供的是一种把自动化的ORM实现。 MyBatis中一级缓存会默认启用(本地缓存)且不受

qq_35385932的博客 591

两万字盘点那些被玩烂了的设计模式

https://mp.weixin.qq.com/s/vWkdyKw3QgE2ABfJDqS7pA

竹林幽深 82
上一篇: 对数据库事务的理解
下一篇: Git实现代码及版本管理
water_java
博客等级 码龄7年 9粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值