• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
思想人生从关注生活开始
博客园    首页    新随笔    联系   管理    订阅  订阅

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采用了工厂模式、建造者模式、装饰器模式、模板方法模式等设计模式,使得框架具有灵活性、扩展性和可维护性。

posted @ 2023-03-09 14:53  JackYang  阅读(214)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3