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

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

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对象返回。

相关推荐

《姐孕》动漫第一季在线看:全新剧情揭开孕妇题材的奇幻冒险
泰国境内10大国际黑帮,警方都头疼很多年!臭名昭著、无恶不作……
2025旅游攻略岘港当地玩乐推荐
喉的五笔怎么打?

喉的五笔怎么打?

06-28 👁️ 573
螃蟹为什么会在洞口造沙球(螃蟹为什么在沙滩上挖洞)
概率分布的方法和公式

概率分布的方法和公式

07-01 👁️ 6181
星耀国际娱乐

星耀国际娱乐

06-30 👁️ 5999
在 iPhone 上关闭“查找”
如何将基本磁盘转换到动态磁盘?Windows系统下的详细教程