首页 > 其他分享 >MyBatis的执行流程及核心组件

MyBatis的执行流程及核心组件

时间:2023-04-04 14:44:37浏览次数:51  
标签:外观 对象 流程 组件 Statement MyBatis 子系统

MyBatis的执行流程及核心组件如图所示。

基本组件介绍

  • Configuration

    用于描述MyBatis的主配置信息,其他组件需要获取配置信息时,直接通过Configuration对象获取。除此之外,MyBatis在应用启动时,将Mapper配置信息、类型别名、TypeHandler等注册到Configuration组件中,其他组件需要这些信息时,也可以从Configuration对象中获取。

  • MappedStatement

    MappedStatement用于描述Mapper中的SQL配置信息,是对Mapper XML配置文件中<select|update|delete|insert>等标签或者@Select/@Update等注解配置信息的封装。SqlSession:SqlSession是MyBatis提供的面向用户的API,表示和数据库交互时的会话对象,用于完成数据库的增删改查功能。SqlSession是Executor组件的外观,目的是对外提供易于理解和使用的数据库操作接口。

  • SqlSession

    SqlSession是MyBatis提供的面向用户的API,表示和数据库交互时的会话对象,用于完成数据库的增删改查功能。SqlSession是Executor组件的外观,目的是对外提供易于理解和使用的数据库操作接口。

  • Executor

    Executor是MyBatis的SQL执行器,MyBatis中对数据库所有的增删改查操作都是由Executor组件完成的。

  • StatementHandler

    StatementHandler封装了对JDBC Statement对象的操作,比如为Statement对象设置参数,调用Statement接口提供的方法与数据库交互,等等。

  • ParameterHandler

    当MyBatis框架使用的Statement类型为CallableStatement和PreparedStatement时,ParameterHandler用于为Statement对象参数占位符设置值。

  • ResultSetHandler

    ResultSetHandler封装了对JDBC中的ResultSet对象操作,当执行SQL类型为SELECT语句时,ResultSetHandler用于将查询结果转换成Java对象。

  • TypeHandler

    TypeHandler是MyBatis中的类型处理器,用于处理Java类型与JDBC类型之间的映射。它的作用主要体现在能够根据Java类型调用PreparedStatement或CallableStatement对象对应的setXXX()方法为Statement对象设置值,而且能够根据Java类型调用ResultSet对象对应的getXXX()获取SQL执行结果。

执行流程

MyBatis框架的基本使用时,我们使用到了SqlSession组件,它是用户层面的API。

实际上SqlSession是Executor组件的外观,目的是为用户提供更友好的数据库操作接口,这是设计模式中外观模式的典型应用。

真正执行SQL操作的是Executor组件,Executor可以理解为SQL执行器,它会使用StatementHandler组件对JDBC的Statement对象进行操作。当Statement类型为CallableStatement和PreparedStatement时,会通过ParameterHandler组件为参数占位符赋值。

ParameterHandler组件中会根据Java类型找到对应的TypeHandler对象,TypeHandler中会通过Statement对象提供的setXXX()方法(例如setString()方法)为Statement对象中的参数占位符设置值。StatementHandler组件使用JDBC中的Statement对象与数据库完成交互后,当SQL语句类型为SELECT时,MyBatis通过ResultSetHandler组件从Statement对象中获取ResultSet对象,然后将ResultSet对象转换为Java对象。

外观模式(设计模式)

外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。

外观模式包含如下角色:

• Facade: 外观角色

• SubSystem:子系统角色

模式优缺点

  • 优点

    • 对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。通过引入外观模式,客户代码将变得很简单,与之关联的对象也很少。

    • 实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。

    • 降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程,因为编译一个子系统一般不需要编译所有其他的子系统。一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象。

    • 只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类。

  • 缺点

    • 不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。

    • 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。

该部分来源: https://www.cnblogs.com/WindSun/p/10263511.html

注意:摘要于《mybatis3源码深度解析》

标签:外观,对象,流程,组件,Statement,MyBatis,子系统
From: https://www.cnblogs.com/daitao-blog/p/17286353.html

相关文章

  • MyBatisPlus——条件查询——null值处理与查询投影
    DQL编程控制条件查询——设置查询条件格式一:常规格式 //方式一:按条件查询 QueryWrapperqw=newQueryWrapper(); //10岁到30岁之间的用户 qw.gt("age",10); qw.lt("age",30); List<User>users=userDao.selectList(qw); System.out.println(users);格式......
  • pod的创建流程
    我们知道kubectl是直接操作APIServer的,所以就相当于把我们的清单提交给了APIServer,然后集群获取到清单描述的应用信息后存入到etcd数据库中,然后kube-scheduler组件发现这个时候有一个Pod还没有绑定到节点上,就会对这个Pod进行一系列的调度,把它调度到一个最合适的节点......
  • windows 服务开发组件之Topshelf
    常用的windows服务开发有vs自带的windows服务开发,但是操作起来不是很便利,相比Topshelf后者更加的方便,且易于调试,安装,卸载.1、安装通过nuget搜索最新版本的topshelf,并安装到控制台项目(netcore和net均可)中,一般都是用控制台调试,然后通过topshelf安装成windows服务.官方......
  • 流程智能工厂建设规划解决方案
    智能制造是实现整个制造业价值链的智能化和创新,是信息化与工业化深度融合的进一步提升。智能制造融合了信息技术、先进制造技术、自动化技术和人工智能技术。智能制造包括开发智能产品;应用智能装备;自底向上建立智能产线,构建智能车间,打造智能工厂流程工业在制造业中占有重要地位......
  • MyBatis插件原理解析(转载)
    前言大多数框架都支持插件,用户可通过编写插件来自行扩展功能,Mybatis也不例外。在Mybatis中最出名的就是PageHelper分页插件,下面我们先来使用一下这个分页插件。如何集成分页插件Spring-Boot+Mybatis+PageHelper引入pom依赖<dependency><groupId>com.github.pagehelper<......
  • React Native学习笔记(三)—— 组件
    一、ReactNative项目1.1、创建ReactNative项目ReactNative有一个内置的命令行界面,你可以用它来生成一个新项目。您可以使用Node.js附带的访问它,而无需全局安装任何内容。让我们创建一个名为“AwesomeProject”的新ReactNative项目:npxnpxreact-native@latestinitAw......
  • 如何通过MyBatis的插件功能来实现分表功能
    前言之前项目中由于几张表的数据量特别的大,在查询的时候特别耗时,所以决定对其进行分表处理。考虑到项目中用的MyBatis作为ORM框架,所以便决定使用它的插件功能来实现动态的替换查询的表来实现分表功能。功能实现整体的目录结构如下TableShard:注解,用来标记需要分表的接口或者......
  • AOF工作流程
     ......
  • C/C++快递自提柜流程模拟系统[2023-04-03]
    C/C++快递自提柜流程模拟系统[2023-04-03]普通用户功能包括:普通用户分为老用户和新用户,新用户需要注册再登录,老用户直接注册并登录,登录时用户名和密码都输入正确才可进入用户界面。进入系统后,用户按照快递单号可以查询订单的所有物流信息:订单编号,快递单号(公司),快递的状态(已出库......
  • mybatis调用存储过程,并返回out参数
        ......