当前位置: 首页 > article >正文

Mybatis中的设计模式

1. 工厂模式(Factory Pattern)

  • 概念:工厂模式是一种创建对象的设计模式,它将对象的创建和使用分离,通过一个工厂类来负责创建对象。
  • MyBatis 中的应用:MyBatis 使用 SqlSessionFactory 来创建 SqlSession 对象。SqlSession 是 MyBatis 执行 SQL 语句、管理事务等操作的核心对象,SqlSessionFactory 充当了创建 SqlSession 的工厂。
  • 举例
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;

public class FactoryPatternExample {
    public static void main(String[] args) throws Exception {
        // 加载 MyBatis 配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 使用 SqlSessionFactoryBuilder 创建 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 通过 SqlSessionFactory 创建 SqlSession
        SqlSession session = sqlSessionFactory.openSession();
        try {
            // 执行数据库操作
        } finally {
            session.close();
        }
    }
}

2. 代理模式(Proxy Pattern)

  • 概念:代理模式是指为其他对象提供一种代理以控制对这个对象的访问。在 Java 中,代理模式可以通过静态代理和动态代理来实现。
  • MyBatis 中的应用:MyBatis 利用 Java 的动态代理机制为 Mapper 接口生成代理对象。开发者只需要定义 Mapper 接口和对应的 SQL 映射文件,MyBatis 会自动生成代理对象,调用 Mapper 接口的方法时,实际上是通过代理对象执行对应的 SQL 操作。
  • 举例
// 定义 Mapper 接口
public interface UserMapper {
    User selectUserById(int id);
}

// 使用 Mapper 接口
SqlSession session = sqlSessionFactory.openSession();
try {
    // 获取 Mapper 接口的代理对象
    UserMapper userMapper = session.getMapper(UserMapper.class);
    // 调用代理对象的方法执行 SQL 操作
    User user = userMapper.selectUserById(1);
} finally {
    session.close();
}

3. 单例模式(Singleton Pattern)

  • 概念:单例模式确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。
  • MyBatis 中的应用ErrorContext 类使用了单例模式。ErrorContext 用于在处理错误时存储和管理错误信息,整个应用程序中只需要一个 ErrorContext 实例来记录错误上下文,确保错误信息的一致性和准确性。
  • 举例:在 MyBatis 代码内部,无论在何处需要记录错误信息,都是通过 ErrorContext.getInstance() 来获取唯一的 ErrorContext 实例。

4. 装饰器模式(Decorator Pattern)

  • 概念:装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。它通过创建一个包装对象,也就是装饰器,来包裹真实的对象。
  • MyBatis 中的应用:MyBatis 的缓存模块使用了装饰器模式。MyBatis 提供了一级缓存和二级缓存,为了对缓存功能进行扩展和增强,使用装饰器模式对基本的缓存实现进行包装。例如,LruCache(最近最少使用缓存)、FifoCache(先进先出缓存)等都是对基本缓存接口的装饰器实现。
  • 举例:在配置 MyBatis 的二级缓存时,可以通过配置不同的缓存装饰器来实现不同的缓存策略。
<cache type="org.apache.ibatis.cache.decorators.LruCache"/>

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

  • 概念:模板方法模式定义了一个操作中的算法的骨架,将一些步骤的实现延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  • MyBatis 中的应用BaseExecutor 类使用了模板方法模式。BaseExecutor 是所有执行器的基类,它定义了执行 SQL 语句的基本流程和框架,具体的执行细节由子类(如 SimpleExecutorReuseExecutor 等)来实现。
  • 举例BaseExecutor 中的 query 方法定义了查询的基本流程,包括获取缓存、执行查询等步骤,而具体的查询实现由子类完成。

6. 建造者模式(Builder Pattern)

  • 概念:建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  • MyBatis 中的应用SqlSessionFactoryBuilder 类使用了建造者模式。SqlSessionFactoryBuilder 用于构建 SqlSessionFactory 对象,它通过一系列的方法调用,逐步设置 SqlSessionFactory 的配置信息,最终创建出一个完整的 SqlSessionFactory 实例。
  • 举例
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);

7. 适配器模式(Adapter Pattern)

  • 概念:适配器模式是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
  • MyBatis 中的应用:在 MyBatis 中,日志模块使用了适配器模式。MyBatis 支持多种日志框架,如 Log4j、SLF4J 等,通过日志适配器将不同日志框架的接口统一适配成 MyBatis 内部使用的日志接口,方便开发者根据需要选择不同的日志框架。
  • 举例:如果使用 Log4j 作为日志框架,MyBatis 会使用 Log4jImpl 类作为适配器,将 Log4j 的日志接口适配成 MyBatis 的日志接口。

http://www.kler.cn/a/573154.html

相关文章:

  • linux如何在某个文件夹下查看所有文件(层级只到当前文件夹的两层)并找到‘XXXX’ 这个单词
  • 基于 Next.js(前端)和 FastAPI(后端)使用 WebSocket(满血版DeepSeek-R1回答)
  • 大模型核心要素完全解析:从数字神经元到智能对话的奥秘
  • npm install 报错 ---- 忽略版本冲突
  • 消息系统队列(Message Queue)之kafka
  • TCP-UDP-WebSocket-组播-单播
  • unity文字转语音usherpa-onnx-tts
  • python-leetcode-零钱兑换 II
  • 【数据结构】什么是栈||栈的经典应用||分治递归||斐波那契问题和归并算法||递归实现||顺序栈和链栈的区分
  • MySQL零基础教程15—简单的表连接(join)
  • 外盘农产品期货数据:历史高频分钟回测的分享下载20250305
  • Linux--基本指令4(完结)和权限
  • 基于Windows11的DockerDesktop安装和布署方法简介
  • C# Unity 面向对象补全计划 之 索引器与迭代器
  • Go语言select的高级玩法
  • Vue的简单入门 三
  • OCPP扩展机制与自定义功能开发:协议灵活性设计与实践 - 慧知开源充电桩平台
  • 确定信号分析:从傅里叶级数到信号带宽的Matlab实践
  • Zookeeper 的 Node(Znode) 是什么?Zookeeper 监听机制的特点是什么?
  • Mybatis控制台打印SQL执行信息(执行方法、执行SQL、执行时间)