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

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

时间:2025-01-19 22:27:37浏览次数:3  
标签:插件 01 定义 Pattern 面试题 模式 接口 MyBatis 设计模式

如果有遗漏,评论区告诉我进行补充

面试官: MyBatis 中见过什么设计模式 ?

我回答:

1. 工厂模式(Factory Pattern)

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

在MyBatis中的应用

  • SqlSessionFactoryBuilderSqlSessionFactory 的创建过程体现了工厂模式的应用。SqlSessionFactoryBuilder 负责读取 MyBatis 配置文件,并构建出 SqlSessionFactory 实例。
  • Mapper接口的实现:MyBatis 使用工厂模式来动态生成 Mapper 接口的实现类。当调用 getMapper() 方法时,MyBatis 根据映射配置为每个 Mapper 接口创建代理实例。

2. 单例模式(Singleton Pattern)

定义:单例模式确保一个类只有一个实例,并提供一个全局访问点,保证在整个应用程序生命周期内共享同一个实例。

在MyBatis中的应用

  • SqlSessionFactory 是单例模式的经典案例。一旦通过 SqlSessionFactoryBuilder 创建了 SqlSessionFactory 实例后,该实例会在整个应用程序中被复用,避免了重复创建实例所带来的资源浪费。
  • TypeAliasRegistry 和其他注册表也通常是单例的,确保类型别名和其他配置信息在整个应用程序中的一致性。

3. 建造者模式(Builder Pattern)

定义:建造者模式旨在将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示,简化了对象的构造过程。

在MyBatis中的应用

  • XMLConfigBuilderXMLMapperBuilder 等类使用了建造者模式来解析 MyBatis 的配置文件和映射文件。这些 Builder 类逐步构建出配置信息和映射信息,提高了代码的清晰度和可维护性。
  • SqlSessionFactoryBuilder 也是建造者模式的一个例子,它负责根据配置创建 SqlSessionFactory

4. 代理模式(Proxy Pattern)

定义:代理模式为其他对象提供一个代理以控制对这个对象的访问,通常用于添加额外的功能而不改变原有接口。

在MyBatis中的应用

  • Mapper接口的实现:MyBatis 使用 JDK 动态代理或 CGLIB 来生成 Mapper 接口的代理实现。代理对象拦截方法调用,执行必要的 SQL 操作,并返回结果。这种方式允许 MyBatis 在不修改业务代码的情况下插入事务管理、缓存处理等横切关注点。
  • 懒加载机制:MyBatis 中的延迟加载功能也是通过代理模式实现的,它允许查询操作的结果集在真正需要时才被加载,提高了性能。

5. 模板方法模式(Template Method Pattern)

定义:模板方法模式定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中,允许子类在不改变算法结构的情况下重定义某些步骤。

在MyBatis中的应用

  • BaseExecutor 类是模板方法模式的具体体现。它定义了数据库操作的基本流程(如查询、更新、提交事务等),但具体的执行逻辑由其子类(如 SimpleExecutorBatchExecutor 等)实现。
  • SQL语句执行流程:无论是 SELECT 还是 INSERT/UPDATE/DELETE 操作,MyBatis 都遵循一定的流程模板,只是具体的操作细节有所不同。

6. 策略模式(Strategy Pattern)

定义:策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换,支持运行时动态选择算法。

在MyBatis中的应用

  • 缓存策略:MyBatis 支持多种缓存策略(如一级缓存、二级缓存),并且允许用户配置不同的缓存实现(例如 EHCache、OSCache)。这体现了策略模式,使得框架具有高度的灵活性和扩展性。
  • 事务管理策略:MyBatis 支持不同的事务管理器(如 JDBC 事务管理器、Spring 管理的事务管理器),允许根据环境需求选择合适的事务管理策略。

7. 观察者模式(Observer Pattern)

定义:观察者模式定义了一种依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

在MyBatis中的应用

  • Configuration对象:在 MyBatis 中,Configuration 对象会监听映射文件的解析事件,并在解析完成后更新自己的状态。此外,当有新的映射文件被加入或者现有映射文件被修改时,Configuration 也会相应地作出调整。
  • 插件机制:MyBatis 的插件系统也是一种观察者模式的应用,插件可以在特定的时间点拦截并处理请求,例如在执行 SQL 之前或之后。

8. 适配器模式(Adapter Pattern)

定义:适配器模式将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

在MyBatis中的应用

  • ResultSetHandler:MyBatis 中的 ResultSetHandler 接口及其默认实现 DefaultResultSetHandler 是适配器模式的应用。它把 JDBC 的 ResultSet 对象转换为 POJO 或其他形式的数据结构,以适应应用程序的需求。这种模式允许 MyBatis 将底层的 JDBC 结果集与上层的应用程序数据模型进行适配。

9. 责任链模式(Chain of Responsibility Pattern)

定义:责任链模式为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

在MyBatis中的应用

  • 插件机制:MyBatis 的插件机制是责任链模式的一个实例。你可以开发多个插件,它们按照一定的顺序被调用,每个插件都有机会处理请求或响应,或者决定是否传递给下一个插件。这种模式使得插件可以依次处理请求,直到某个插件处理完毕或所有插件都尝试过。

综上所述,MyBatis 广泛采用了上述九种设计模式,这些模式不仅提升了框架本身的内聚性、可扩展性和灵活性,也为开发者提供了强大的工具来解决持久层开发中的复杂问题。在面试中,能够详细阐述这些设计模式在 MyBatis 中的具体应用及其带来的好处,有助于展示你的技术深度和广度。

标签:插件,01,定义,Pattern,面试题,模式,接口,MyBatis,设计模式
From: https://blog.csdn.net/qq_43071699/article/details/145249147

相关文章

  • 1.19 CW 模拟赛 T3. [NWRRC2015] Graph
    前言最后一道,补了跑路思路原来是贪心,那没救了首先考虑不加边的时候怎么处理显然我们可以用小根堆代替队列处理\(\rm{topo}\)序那么我们如何使得这个答案变大不难发现,我们只要对于当前堆顶加一条入度,就一定可以使得答案变大但是由谁来连这一条边呢?我们先不管,......
  • Unraid 安装 WindowsServer2019 及 NGINX、PHP、Python 环境
    一、安装虚拟机使用Unraid安装。项目值初始内存:4096MB最大值内存:6144MB机器:i440fx-7.2BIOS:OVMF启用USB启动引导:NoHyper-V:是USB控制器:2.0(EHCI)操作系统安装ISO:windows_server_2019.iso操作系统安装光盘总线:......
  • 中考英语优秀范文-热点话题-传统文化-010 Mid-Autumn Festival 中秋节
    1写作要求中秋节是我国的传统节日,随着经济的发展和时代的变迁,中秋节依然在我们国人心中有着重要的位置。在中秋节,人们望着天上的明月,守望膜拜,吃着月饼,寄托情怀,这个节日更多地被赋予了思念亲人的色彩,祈求团圆和幸福。过去的中秋节有没有特别让你难忘的事情发生,让你觉得温暖、意义......
  • AGC018
    AGC018B题目大意举办一场运动会,有\(N\)人,\(M\)个项目,每个人所有项目都有一个排名,会选择参加排名最高且开设的项目,现在要开设若干项目使得人数最多的项目人数尽可能小,求这个最小值。解题思路考虑贪心。一开始,我们不妨开设所有项目,设人数最多的项目为\(x\)。如果我们不关......
  • 打卡信奥刷题(628)用C++信奥P8053[普及组/提高] [COCI2015-2016#4] DEATHSTAR
    [COCI2015-2016#4]DEATHSTAR题目描述你排除万难,潜入了DeathStar。要想摧毁它,你需要一个长度为nnn的数组a......
  • .NET周刊【1月第1期 2025-01-05】
    国内文章3款.NET开源、功能强大的通讯调试工具,效率提升利器!https://www.cnblogs.com/Can-daydayup/p/18631410本文介绍了三款功能强大的.NET开源通讯调试工具,旨在提高调试效率。这些工具包括LLCOM,提供串口调试和自动化处理功能;Wu.CommTool,支持ModbusRTU和MQTT调试,界面丰富;以及......
  • 250118 ABC389总结
    昨天激情地打了1场ABC。A一眼秒了。B一眼秒了。C两眼秒了。D1.5眼秒了,然后发现题读错了,不过问题不大,最后还是秒了。第一发没开longlong见祖宗了。全军复诵:不开longlong见祖宗。E一眼dp,但是我不会dp,所以想了一小下直接去看F了。最后的最后试图码了一下单调队列+暴......
  • AGC018做题笔记
    AtcoderGrandContest018B-SportsFestival题目大意有\(N\)个人参加\(M\)个项目的运动会,这\(M\)可以至多被删去\(M-1\)个。第\(i\)个人会参加序列\(a_i\)中第一个可以被参加的项目\(a_{i,j}\)。现在要使参加人数最多的项目人数最少,求这个最小人数。解题思......
  • 团体程序设计天梯赛-练习集——L1-011 A-B
    前言相对来说,这道题就比较简单了,但是这道题整整有20分呢,巨肥L1-011A-B本题要求你计算A−B。不过麻烦的是,A和B都是字符串——即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。输入格式:输入在2行中先后给出字符串A和B。两字符串的长度都不......
  • 设计模式:责任链模式——行为型模式
    目录主要角色优点缺点适用场景示例代码普通写法:策略模式:总结对比责任链模式(ChainofResponsibilityPattern)是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求发送者与接收者之间的耦合关系。这个模式将请求沿着处理链传递,直到有一个对象处理该请求为止......