MyBatis 中的动态 SQL 是什么? 如何使用动态 SQL?

这篇具有很好参考价值的文章主要介绍了MyBatis 中的动态 SQL 是什么? 如何使用动态 SQL?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概念:

在 MyBatis 中,动态 SQL 是指能够根据条件动态生成 SQL 语句的功能。通过使用动态 SQL,可以根据不同的条件生成不同的 SQL 语句,从而实现灵活的查询和操作。

特点:

  • 条件判断:通过 , , , 标签实现 SQL 语句中的条件逻辑,根据传入参数的值来决定是否包含某一部分 SQL 语句。
  • 循环遍历:使用 标签遍历集合或数组,动态生成 IN 条件、批量插入或更新等操作。
  • 去除多余空格与关键字:, 和 标签用于处理多余的空格、逗号以及自动添加 WHERE 或 SET 关键字。
  • 简化子查询: 标签可以引用其他已定义的 SQL 片段,避免重复书写相同的子查询或复杂表达式。

使用场景:

  • 条件查询:根据用户输入或业务需求动态添加或移除 WHERE 子句的条件。
  • 批量操作:根据传入集合动态生成多条 INSERT、UPDATE 或 DELETE 语句。
  • 动态列名与值:在 UPDATE 语句中,根据参数对象的属性状态决定需要更新哪些字段。
  • 动态表名:在多租户或多数据库环境下,根据参数动态切换操作的数据库表。

MyBatis 中有几种方式可以实现动态 SQL:

使用 if元素: if元素可以根据条件动态生成 SQL 片段。例如:

<select id="findUsers" parameterType="map" resultType="User">
    SELECT * FROM users
    WHERE 1=1
    <if test="username != null">
        AND username = #{username}
    </if>
    <if test="age != null">
        AND age = #{age}
    </if>
</select>

使用 choose元素: choose元素类似于 Java 中的 switch 语句,根据条件选择执行不同的 SQL 片段。例如:


<select id="findUsers" parameterType="map" resultType="User">
    SELECT * FROM users
    WHERE 1=1
    <choose>
        <when test="username != null">
            AND username = #{username}
        </when>
        <when test="age != null">
            AND age = #{age}
        </when>
        <otherwise>
            AND status = 'active'
        </otherwise>
    </choose>
</select>

使用 where元素:where元素可以自动去掉 SQL 语句中多余的 AND 或者 OR,从而简化 SQL 的书写。例如:

<select id="findUsers" parameterType="map" resultType="User">
    SELECT * FROM users
    <where>
        <if test="username != null">
            AND username = #{username}
        </if>
        <if test="age != null">
            AND age = #{age}
        </if>
    </where>
</select>

使用 foreach元素: foreach元素可以用来遍历集合或数组,并根据集合或数组中的元素动态生成 SQL 语句。例如:

<select id="findUsersByIds" parameterType="map" resultType="User">
    SELECT * FROM users
    WHERE id IN
    <foreach collection="ids" item="id" open="(" close=")" separator=",">
        #{id}
    </foreach>
</select>

这些是 MyBatis 中实现动态 SQL 的常见方式,通过灵活运用这些功能,可以编写出更加灵活、可维护的 SQL 查询语句。文章来源地址https://www.toymoban.com/news/detail-852088.html

到了这里,关于MyBatis 中的动态 SQL 是什么? 如何使用动态 SQL?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

            OGNL表达式         OGNL,全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,它旨在提供一个更高的更抽象的层次来对Java对象图进行导航。         OGNL表达式的基本单位是\\\"导航链\\\",一般导航链由如下几个部

    2024年02月15日
    浏览(48)
  • 如何理解mybatis中sql的动态和静态

    在MyBatis中,SQL的语句可以分为动态和静态。静态SQL是指在应用程序编写SQL语句时已经固定好的SQL语句,而动态SQL则是可以根据条件动态地生成SQL语句。 动态SQL在实际开发中非常常见,它可以根据条件进行if、choose、when、otherwise、foreach等元素的组合拼接,从而生成不同的SQL语

    2024年02月13日
    浏览(33)
  • 【Spring 篇】深入探讨MyBatis映射文件中的动态SQL

    MyBatis,这个名字在Java开发者的世界中犹如一道光芒,照亮着持久层操作的道路。而在MyBatis的映射文件中,动态SQL则是一个让人爱-hate的存在。有时候,你感叹它的灵活性,有时候,你可能会为它的繁琐而头痛。但别担心,我们将在本文中一起揭开动态SQL的神秘面纱,带你领

    2024年01月24日
    浏览(59)
  • MyBatis(多表查询,动态SQL的使用)

    目录 多表查询  查询文章详情 查询一个用户底下的所有文章 动态SQL的使用 if 标签 trim 标签  where 标签 set 标签 foreach 标签 现在有俩张表,一张是 文章表 ,一张是 用户表 .如下: 我们现在想查询得到一张表,表里面的内容和文章表大多一致,只是要 在文章表的基础上添加用户表中

    2024年02月10日
    浏览(46)
  • MyBatis XML 映射文件中的 SQL 语句可以分为动态语句和静态语句

    目录 静态查询: 动态查询: 静态更新: 动态更新: 静态删除: 动态删除: 动态语句和静态语句在 MyBatis 中的作用如下: 静态查询: 静态查询是指在 SQL 语句中执行固定的查询操作,查询的条件和内容是预先确定的,不会随着用户输入或其他条件的改变而改变。以下是一

    2024年01月18日
    浏览(72)
  • Mybatis学习笔记,包含mybatis基本使用、关系映射、动态SQL、分页插件等等

    😀😀😀创作不易,各位看官点赞收藏. 简介:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain

    2024年02月15日
    浏览(49)
  • 深入解析 MyBatis 中的 <;foreach>; 标签:优雅处理批量操作与动态 SQL

    在当今的Java应用程序开发中,数据库操作是一个不可或缺的部分。MyBatis作为一款颇受欢迎的持久层框架,为我们提供了一种优雅而高效的方式来管理数据库操作。在MyBatis的众多特性中, foreach 标签无疑是一个强大的工具,它使得在SQL语句中进行动态循环迭代变得轻而易举。

    2024年02月13日
    浏览(46)
  • Mybatis的动态SQL及关键属性和标识的区别(对SQL更灵活的使用)

                                                                                     (  虽然文章中有大多文本内容,想了解更深需要耐心看完,必定大有受益 ) 目录 一、动态SQL ( 1 ) 是什么 ( 2 ) 作用 ( 3 ) 优点 ( 4 ) 特殊标签 ( 5 ) 演示 二、#和$的区别 2.1  #使用  

    2024年02月11日
    浏览(30)
  • MyBatis动态sql之批量修改、批量新增(使用foreach标签的一条sql语句解决)

            批量新增和批量修改在业务中是很常见的,一条sql访问数据库和通过代码循环体中循环访问数据库做单个数据新增修改相比较下:一条sql访问数据库性能上明显提升,代码且简洁明了 1、Mapper.java中 说明: 参数是list  2、Mapper.xml中 说明: 通过trim标签拼接前后缀和

    2024年02月10日
    浏览(53)
  • MyBatis案例 | 使用映射配置文件实现CRUD操作——动态SQL优化条件查询

    本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JavaWeb Java入门篇: 🔥Java基础学习篇 Java进阶学习篇(持续更新中):🔑Java进阶学习篇 本系列文章会将讲述有关

    2024年02月02日
    浏览(87)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包