MyBatis的基本架构及其使用的设计模式-MyBatis从入门到进阶系列
1.定义
MyBatis是一个轻量级的ORM(对象关系映射)持久层框架,它将Java对象和关系数据库之间的映射关系交给开发人员自己来实现,而不是像Hibernate等ORM框架那样自动化处理。MyBatis通过XML或注解的方式来定义SQL语句和映射关系,使得开发人员可以更加灵活地控制SQL语句的执行和结果集的处理,从而达到更好的性能和可维护性。因此为了应用好它,我们必要要了解其基本架构显得非常重要。
2.基本架构
总体来说,MyBatis的基本架构分为三层。
第一层是SqlSessionFactoryBuilder和SqlSessionFactory,负责MyBatis的启动和配置。
第二层是SqlSession和Executor,负责与数据库交互。
第三层是StatementHandler、ParameterHandler和ResultSetHandler,负责具体的SQL语句的执行和结果处理。
2.1具体各个组件的作用
- SqlSessionFactoryBuilder
SqlSessionFactoryBuilder用于解析配置文件,创建SqlSessionFactory对象,是MyBatis的入口类,为MyBatis提供核心的SessionFactory。
- SqlSessionFactory
SqlSessionFactory是MyBatis的核心接口之一,用于创建SqlSession对象。SqlSession是MyBatis与数据库交互的基本操作单元。 - SqlSession
SqlSession是MyBatis的核心接口之一,用于执行SQL语句、提交事务、关闭连接等操作。 - Executor:
MyBatis的执行器接口,用于执行SQL语句。
MyBatis常用三种Executor实现:
SimpleExecutor、ReuseExecutor、BatchExecutorSimpleExecutor为每个SQL语句创建一个新的PreparedStatement对象,而ReuseExecutor则重复使用已有的PreparedStatement对象。
- StatementHandler:
MyBatis的语句处理器接口,用于处理PreparedStatement对象。
MyBatis提供了两种StatementHandler实现:
SimpleStatementHandler和 PreparedStatementHandler。SimpleStatementHandler用于处理静态SQL语句,而PreparedStatementHandler
则用于处理动态SQL语句。
- ParameterHandler:
MyBatis的参数处理器接口,用于处理SQL语句中的参数。ParameterHandler将Java对象转换成JDBC参数,然后设置到PreparedStatement对象中。
- ResultSetHandler
MyBatis的结果集处理器接口,用于处理SQL查询结果集。MyBatis提供了多种ResultSetHandler实现,包括MapResultSetHandler、BeanResultSetHandler、ArrayResultSetHandler等。 - MappedStatement:
MappedStatement用于描述SQL语句,包括SQL语句的ID、类型、参数映射、结果集映射等元数据。。
2.2组件之间的交互流程
- SqlSessionFactoryBuilder通过读取配置文件创建SqlSessionFactory对象。
- SqlSessionFactory对象通过读取Mapper配置文件和映射接口的注解信息创建MappedStatement对象。
- SqlSession对象通过调用Executor的方法执行SQL语句。
- Executor对象通过调用StatementHandler处理SQL语句,ParameterHandler处理参数,ResultSetHandler处理结果集。
- StatementHandler使用了模板方法设计模式,将SQL语句的处理过程分为几个步骤,由不同的子类实现。
- ParameterHandler将Java对象的属性值映射到SQL语句中的参数。
- ResultSetHandler将SQL语句的结果集映射到Java对象中。
2.3组件使用经典设计模式
- Builder模式
MyBatis使用Builder模式构建SqlSessionFactory对象。使用Builder模式可以使得SqlSessionFactory对象的创建过程更加灵活。 - 工厂模式
SqlSessionFactory作为MyBatis的核心接口之一,采用工厂模式创建SqlSession对象。这样可以隐藏SqlSession对象的创建过程,使得应用程序更加易于维护。 - 代理模式
Mapper接口在运行时由MyBatis生成代理对象,代理对象负责最终的SQL语句执行。采用代理模式可以使得Mapper接口的实现更加简单,同时也提高了应用程序的性能。 - 模板方法模式
MyBatis的SqlSession接口定义了一组标准的数据库操作方法,这些方法的具体实现由具体的SqlSession实现类完成。这种模式可以使得SqlSession的具体实现与应用程序解耦,同时也方便了SqlSession的扩展。
总的来说,MyBatis采用了工厂模式、建造者模式、装饰器模式、模板方法模式等设计模式,使得框架具有灵活性、扩展性和可维护性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现