Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行原理? 您所在的位置:网站首页 sql是什么和功能 Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行原理?

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

2023-07-15 04:03| 来源: 网络整理| 查看: 265

Mybatis的动态sql的作用:

动态sql就是(在进行sql操作的时候)动态的根据属性值(所匹配的条件)来拼接数据库执行的sql语句,也就是多次查询或变更操作,根据传入的属性值不同,动态拼接出不同的可执行sql。包含判断为空、循环等;

 

Mybatis动态sql(有哪些)标签:

1、: 

if是为了判断传入的值是否符合某种规则,比如是否不为空;

 

2、:

 where标签可以用来做动态拼接查询条件,当和if标签配合的时候,不用显示的声明类似where 1=1这种无用的条件;

 

3、:

这是一组组合标签,他们的作用类似于 Java 中的 switch、case、default。只有一个条件生效,也就是只执行满足的条件 when,没有满足的条件就执行 otherwise,表示默认条件;

 

4、:

foreach标签可以把传入的集合对象进行遍历,然后把每一项的内容作为参数传到sql语句中,里面涉及到 item(具体的每一个对象), index(序号), open(开始符), close(结束符), separator(分隔符);

 

5、:

include可以把大量重复的代码整理起来,当使用的时候直接include即可,减少重复代码的编写;

 

6、:

适用于更新中,当匹配某个条件后,才会对该字段进行更新操作

 

7、:

是一个格式化标签,主要有4个参数:

    prefix(前缀);

    prefixOverrides(去掉第一个标记);

    suffix(后缀);

    suffixOverrides(去掉最后一个标记);

 

动态sql的执行原理:

第一部分:在启动加载解析xml配置文件的时候进行解析,根据关键标签封装成对应的handler处理对象,封装成sqlSource对象存在mappedStatement。

调用流程:

I、SqlSessionFactoryBuilder对builder对象的时候,调用XMLConfigBuilder解析sqlMapConfig.xml配置文件,在解析过程中使用到了私有的mapperElement(XNode parent)方法

II、上面方法中通过构建XMLMapperBuilder,获取到所有的配置mapper配置,

在调用private void configurationElement(XNode context)方法进行解析mapper.xml,通过void buildStatementFromContext(List list, String requiredDatabaseId)方法解析mapper.xml内的每一个标签

III、循环中构建XMLStatementBuilder对象,调用parseStatementNode()方法来封装mappedStatment对象,

IIII、在过程中需要构建sqlSource对象,通过XMLLanguageDriver对象进行处理,在XMLLanguageDriver中构建解析动态标签对象XMLScriptBuilder

第二部分:在执行过程中获取sqlSource中获取bondSql对象时,执行相应的标签handler

调用查询执行到BaseExecutor的query方法时候会去getBoundSql并且将参数传进去,

在sqlSource接口DynamicSqlSource实现类中,调用getBoundSql方法执行过程共创建DynamicContext对象进行判定解析封装成SqlSource对象返回。

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有