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

这篇具有很好参考价值的文章主要介绍了Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述动态 sql 的执行原理不?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        OGNL表达式

        OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,它旨在提供一个更高的更抽象的层次来对Java对象图进行导航。

        OGNL表达式的基本单位是"导航链",一般导航链由如下几个部分组成:

属性名称(property) 
方法调用(method invoke) 
数组元素
所有的OGNL表达式都基于当前对象的上下文来完成求值运算,链的前面部分的结果将作为后面求值的上下文。例如:names[0].length()。

        MyBatis动态SQL使用OGNL表达式来判断条件,并根据条件决定是否包含某个SQL片段。OGNL表达式是一种基于Java表达式的语言,可以访问Java对象和方法。动态SQL是一种允许根据不同条件在SQL语句中动态生成特定的查询条件、表名、列名等的技术。通过使用动态SQL,可以减少代码的重复度,提高代码的灵活性和可维护性。

        Mybatis提供了以下几种常用的动态SQL标签:

if、choose、when、otherwise、trim、where、set、foreach、bind、include

1、<if>: 

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

2、<where>:

 where标签可以用来做动态拼接查询条件,where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

3、<choose><when><otherwise>:

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

4、<foreach>:

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

u

6、<set>:
适用于修改更新中,当匹配某个条件后,才会对该字段进行更新操作。

7、<trim>:
trim标签通常用来去掉特定字符或者关键字。
是一个格式化标签,主要有4个参数:

    prefix(前缀);

    prefixOverrides(去掉第一个标记);

    suffix(后缀);

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

8、<bind>: 
bind 标签用于定义一个变量,该变量可以被后续的 SQL 片段引用,方便了 SQL 的编写。


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

调用流程:

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

        2.上面方法中通过构建XMLMapperBuilder,获取到所有的配置mapper配置,在调用private void configurationElement(XNode context)方法进行解析mapper.xml,通过void buildStatementFromContext(List<XNode> list, String requiredDatabaseId)方法解析mapper.xml内的每一个标签

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

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

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

        调用查询执行到BaseExecutor的query方法时候会去getBoundSql并且将参数传进去,在sqlSource接口DynamicSqlSource实现类中,调用getBoundSql方法执行过程共创建DynamicContext对象进行判定解析封装成SqlSource对象返回。文章来源地址https://www.toymoban.com/news/detail-616852.html

到了这里,关于Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述动态 sql 的执行原理不?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis 动态SQL的标签有哪些?如何使用?

    目录 1. MyBatis 动态SQL标签有什么用? 2. if 标签 3. where 标签 4. trim 标签 5. choose,when,otherwise 6. foreach 1. MyBatis 动态SQL标签有什么用? 我来说一个场景大家就明白了,如下图,大家应该在铁路12306上买过火车票吧,可以看到,我们在选票的时候可以对车做很多种选择和筛选,系

    2024年02月11日
    浏览(37)
  • MyBatis 中的动态 SQL 是什么? 如何使用动态 SQL?

    在 MyBatis 中,动态 SQL 是指能够根据条件动态生成 SQL 语句的功能。通过使用动态 SQL,可以根据不同的条件生成不同的 SQL 语句,从而实现灵活的查询和操作。 条件判断:通过 , , , 标签实现 SQL 语句中的条件逻辑,根据传入参数的值来决定是否包含某一部分 SQL 语句。 循环遍

    2024年04月15日
    浏览(30)
  • 测试开发到底是做什么的?测试开发需要掌握哪些技术

    关于“测试开发是什么?为什么现在那么多公司都要招聘测试开发?”我们直接就从这两个问题去回答并分析其原因: 测试开发是什么? 为什么现在那么多公司都要招聘测试开发? PS :这里有一套2022最新版的 软件测试 全套 自学教程 ,包含了以下内容,记得一定要下载:

    2023年04月09日
    浏览(46)
  • html form中的input有哪些类型?各是做什么处理使用的

    在HTML表单中,input元素有多种类型,主要包括以下几种: button:用于定义可点击的按钮。 checkbox:用于定义复选框,用户可以选择多个选项。 file:用于定义文件输入字段,用户可以从本地选择文件上传到服务器。 hidden:用于定义隐藏的输入字段,用户无法直接看到,但可以

    2024年01月24日
    浏览(39)
  • 文档管理是什么?都有哪些?

    很多做服务端开发的同学,基本都用Postman来测试接口,虽然Postman能支撑日常工作,但是总感觉还是少了点什么,比如需要Swagger来维护接口文档,需要手动发送接口变更通知。而今天给大家介绍一款国产化接口管理工具eolink,它究竟是何方神圣?Eolink和Postman相比到底怎么样?

    2024年02月02日
    浏览(63)
  • 什么是3G路由 3G路由都有哪些功能

    3G路由的术语描述是这样的: 3G无线路由器采用32位高性能工业级ARM9通信处理器,以嵌入式实时操作系统RTOS为软件支撑平台,系统集成了全系列从逻辑链路层到应用层通信协议,支持静态及动态路由,PPP server及PPP client,VPN(包括PPTP和IPSEC),DHCP server及DHCP client,DDNS,防火墙

    2024年02月06日
    浏览(42)
  • iOS设计规范是什么?都有哪些具体规范

    iOS设计规范是苹果为移动设备操作系统iOS制定的设计指南。iOS设计规范的制定保证了苹果应用在外观和操作上的一致性和可用性,从而提高了苹果界面设计的用户体验和应用程序的成功性。本文将从七个方面全面分析iOS设计规范。 由「即时设计」团队整理的 Apple 官方 iOS 15

    2024年02月12日
    浏览(64)
  • Spring MVC常用注解有哪些?都有什么用?

    Spring MVC常用注解有哪些以及都有什么用?  @ResponseBody: 添加在方法上,标记此方法是“响应正文”的,添加在类上,标记此类中所有方法都是“响应正文”的。 @RestController: 添加在类上,标记此类是一个“响应正文”的控制器类。 @RequestMapping: 添加在类上,也可以添加在

    2024年01月21日
    浏览(46)
  • 深度学习中有哪些超参数,都有什么作用

    深度学习中有许多超参数需要设置,它们会对模型的性能和训练过程产生重要影响。以下是一些常见的超参数及其作用: 学习率(Learning Rate):控制参数更新的步长。较小的学习率可以使模型收敛更稳定,但可能需要更多的训练时间;较大的学习率可以加快收敛速度,但可

    2024年02月10日
    浏览(54)
  • 协同设计有什么优势?都有哪些协同设计软件

    设计师创作既有视觉吸引力又实用的作品需要很多时间。对于某些项目,第一次可能会顺利验收,但事实上,设计和修改总是伴随着。 如何有效地修改和促进项目的实施?答案很简单:协作设计。本文将带您深入学习协作设计的相关知识,使您的设计更加简单!更有效率!

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包