Mybatis动态sql是做什么的?都有哪些动态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对象返回。
|
CopyRight 2018-2019 实验室设备网 版权所有 |