美文网首页spring boot
mybatis中动态sql执行原理

mybatis中动态sql执行原理

作者: 蔬菜妞 | 来源:发表于2021-01-25 10:29 被阅读0次

mybatis中动态sql执行原理

  1. SqlResource 该接口含义是作为sql对象的来源,通过该接口可以获取sql对象。其唯一的实现类是XmlSqlResource,表示通过xml文件生成sql对象。
  2. Sql 该接口可以生成sql语句和获取sql相关的上下文环境(如ParameterMap、ResultMap等),有三个实现类: RawSql表示为原生的sql语句,在初始化即可确定sql语句;SimpleDynamicSql表示简单的动态sql,即sql语句中参数通过property方式指定,参数在sql生成过程中会被替换,不作为sql执行参数;DynamicSql表示动态sql,即sql描述文件中包含isNotNull等条件标签。
  3. SqlChild 该接口表示sql抽象语法树的一个节点,包含sql语句的片段信息。该接口有两个实现类: SqlTag表示动态sql片段,即配置文件中的一个动态标签,内含动态sql属性值(如prepend、property值等);SqlText表示静态sql片段,即为原生的sql语句。每条动态sql通过SqlTag和SqlText构成相应的抽象语法树。
  4. SqlTagHandler 该接口表示SqlTag(即不同的动态标签)对应的处理方式。比如实现类IsEmptyTagHandler用于处理标签,IsEqualTagHandler用于处理标签等。
  5. SqlTagContext 用于解释sql抽象语法树时使用的上下文环境。通过解释语法树每个节点,将生成的sql存入SqlTagContext。最终通过SqlTagContext获取完整的sql语句。

从设计上看,dynamic sql的实现主要涉及三个模式:

解释器模式: 初始化过程中构建出抽象语法树,请求处理时根据参数对象解释语法树,生成sql语句。
工厂模式: 为动态标签的处理方式创建工厂类(SqlTagHandlerFactory),根据标签名称获取对应的处理方式。
策略模式: 将动态标签处理方式抽象为接口,针对不同标签有相应的实现类。解释抽象语法树时,定义统一的解释流程,再调用标签对应的处理方式完成解释中的各个子环节

相关文章

  • MyBatis核心知识点

    (1)Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不? Mybatis动...

  • 关于Mybatis的一些问题讨论

    Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行原理 动态sql的用途 Mybat...

  • mybatis中动态sql执行原理

    mybatis中动态sql执行原理 SqlResource 该接口含义是作为sql对象的来源,通过该接口可以获取s...

  • mybatis问题集合(一)

    一、Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行原理? 以XML 标签的形 式...

  • 动态 SQL

    根据不同的条件需要执行不同的 SQL 命令.称为动态 SQL MyBatis中动态SQL在mapper.xml中添...

  • 全网已破千万点击!MyBatis源码:配置、映射文件SQL执行过

    本篇MYBAITS灵魂知识点总结 MYBATIS的实现原理 MYBATIS的映射文件 MYBATIS的动态SQL ...

  • 无标题文章

    ### 一、简答题 #### 1、Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行...

  • 动态sql

    根据不同条件,需要执行不同的sql命令 MyBatis中动态sql是在mapper.xml中添加逻辑判断

  • 第八章 动态SQL

    动态SQL中的元素介绍 动态SQL有什么作用 MyBatis提供了对SQL语句动态组装的功能 动态SQL中的元素 ...

  • MyBatis学习:动态sql

    1.动态sql 动态sql是mybatis中的一个核心,什么是动态sql?动态sql即对sql语句进行灵活操作,通...

网友评论

    本文标题:mybatis中动态sql执行原理

    本文链接:https://www.haomeiwen.com/subject/memrzktx.html