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

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 创建 SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过 SqlSessionFactory 创建 SqlSessionSqlSession 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.mrgr.cn/news/93221.html

相关文章:

  • 安装微软最新原版系统,配置好系统驱动并保留OOBE全新体验
  • JAVA入门——反射
  • 《Operating System Concepts》阅读笔记:p188-p199
  • 蓝桥杯C组真题——巧克力
  • Linux软件包管理
  • HTTP 黑科技
  • uniapp:小程序将base64图片字符串保存到手机相册
  • 免费分享一个软件SKUA-GOCAD-2022版本
  • C++11中atomic
  • 大模型在呼吸衰竭预测及围手术期方案制定中的应用研究
  • 计算机网络核心知识点:信道容量、OSI模型与调制技术详解
  • 鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态
  • iOS安全和逆向系列教程 第8篇:iOS应用动态分析与Hook技术
  • iOS安全和逆向系列教程 第2篇: iOS系统架构详解 - 逆向工程的基石
  • iOS安全和逆向系列教程 第3篇:搭建iOS逆向开发环境 (上) - 工具链与基础配置
  • iOS安全和逆向系列教程 第5篇 iOS基础开发知识速览 - 理解你要逆向的目标
  • Django项目实战
  • C语音的常见概念
  • Leetcode 刷题记录 01 —— 哈希
  • 一键安装Nginx部署脚本之Linux在线安装Nginx,脚本化自动化执行服务器部署(附执行脚本下载)