首页 > 数据库 >MyBatis 动态 SQL 详解

MyBatis 动态 SQL 详解

时间:2024-11-05 15:18:41浏览次数:4  
标签:sname 标签 查询 详解 SQL MyBatis 动态

动态 SQL 简介

动态 SQL 是 MyBatis 的强大特性之一,它允许在 XML 映射文件内以标签的形式编写动态 SQL,完成逻辑判断和动态拼接 SQL 的功能。动态 SQL 可以根据用户输入或外部条件动态地构建查询,避免了硬编码查询逻辑,简化了数据库查询的复杂度,同时提高了代码的可读性和维护性。

MyBatis 动态 SQL 标签

MyBatis 提供了多种动态 SQL 标签,以下是一些常用的标签:

  1. <if>:根据条件动态拼接 SQL。
  2. <choose><when><otherwise>:类似于 Java 中的 switch-case 语句。
  3. <trim><where><set>:用于处理 SQL 语句的不同部分,如自动添加 WHERE,并去除多余的 AND。
  4. <foreach>:用于处理集合,生成 IN 查询。

动态 SQL 的执行原理

MyBatis 动态 SQL 的执行原理是使用 OGNL 从 SQL 参数对象中计算表达式的值,根据表达式的值动态拼接 SQL,以此来完成动态 SQL 的功能。

动态 SQL 实例

条件查询操作

以下是一个使用 <if> 标签的示例,根据输入条件动态构建查询:


xml

<select id="findQuery" resultType="Student">
    <include refid="selectvp"/>
    <where>
        <if test="sacc != null">
            sacc like concat('%' #{sacc} '%')
        </if>
        <if test="sname != null">
            AND sname like concat('%' #{sname} '%')
        </if>
        <if test="sex != null">
            AND sex=#{sex}
        </if>
        <if test="phone != null">
            AND phone=#{phone}
        </if>
    </where>
</select>

在这个例子中,如果传入的参数对象中包含 sacc 属性,则会添加一个 sacc 的查询条件;同理,如果包含 snamesexphone 属性,也会相应地添加查询条件。

选择查询操作

<choose><when><otherwise> 标签组合用于条件分支选择:


xml

<select id="findActiveBlogLike" resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <choose>
    <when test="title != null">
      AND title like #{title}
    </when>
    <when test="author != null and author.name != null">
      AND author_name like #{author.name}
    </when>
    <otherwise>
      AND featured = 1
    </otherwise>
  </choose>
</select>

在这个例子中,如果传入了 title 则按 title 查找,传入了 author 则按 author 查找,若两者都没有传入,则返回标记为 featured 的 BLOG。

更新操作

<set> 标签用于构建动态 SQL 语句中的 UPDATE 操作:


xml

<update id="upd">
    update student
    <set>
        <if test="sname != null">sname=#{sname},</if>
        <if test="spwd != null">spwd=#{spwd},</if>
        <if test="sex != null">sex=#{sex},</if>
        <if test="phone != null">phone=#{phone}</if>
    </set>
    sid=#{sid}
    where sid=#{sid}
</update>

在这个例子中,只有非空的字段才会被更新。

结语

MyBatis 动态 SQL 提供了一种灵活且强大的方式来构建 SQL 语句,使得开发者可以根据不同的条件动态地生成 SQL。这不仅提高了代码的可维护性,也使得 SQL 语句更加清晰和易于理解。希望这篇博客能帮助你更好地理解和使用 MyBatis 动态 SQL。

标签:sname,标签,查询,详解,SQL,MyBatis,动态
From: https://blog.csdn.net/weixin_73687229/article/details/143509784

相关文章

  • golang占位符%v、%+v、%#v详解
    目录%v%+v%#v在Go语言中,fmt包提供了格式化字符串的功能,类似于C语言的printf函数。fmt包中的%v、%+v和%#v是用于格式化输出的占位符,它们各自有不同的用途。%v含义:%v表示以默认格式(值)输出变量。对于基本类型如整数、浮点数等,它会直接输出其值;对于结构体,它会输出......
  • MySQL server 免安装教程
    1,下载免安装包-社区版本https://dev.mysql.com/downloads/file/?id=5343202,解压放到一电脑某个路径下,整个包3,创建data文件夹和my.ini文件my.ini代码照抄,注意修改路径,与解压后的安装包地址一致[mysqld]#设置3306端口port=3306#设置mysql的安装目录basedir="D:\\s......
  • 队列的用法详解
    队列是一种常用的数据结构,具有先进先出(FIFO,First-In-First-Out)的特点。通常用来管理需要按顺序处理的任务,例如打印队列、任务调度、资源分配等。下面详细介绍队列的基本概念、常用操作、类型及其在C语言中的实现。队列的基本概念在队列中:入队(enqueue):将元素添加到队列的......
  • Nuxt.js 应用中的 nitro:build:public-assets 事件钩子详解
    title:Nuxt.js应用中的nitro:build:public-assets事件钩子详解date:2024/11/5updated:2024/11/5author:cmdragonexcerpt:nitro:build:public-assets是Nuxt3中的一个生命周期钩子,在复制公共资产之后调用。该钩子使开发者能够在构建Nitro服务器之前,对公共资产进......
  • 热更新技术详解
    1.引言1.1热更新的定义热更新是一种技术手段,允许在不重启应用程序的情况下更新和替换应用中的代码、资源或配置。这种技术通常在需要频繁更新、提高用户体验的系统中使用,如Web应用、移动应用和游戏开发等场景。通过热更新,开发者可以在用户使用过程中修复BUG、推送新功能......
  • 如何在虚拟机上安装MySQL5.7和彻底在虚拟机上删除MySQL5.7
    一、安装MySQL数据库5.7版本​在部署hive时,我的主节点为hadoop1,从节点为hadoop2和hadoop3,软件为VMware的centos9。在hadoop1节点使用yum在线安装MySQL5.7版本。在root用户下执行:1.更新密钥rpm--importhttps://repo.mysql.com/RPM-GPG-KEY-mysql-20222.安装Mysqlyum......
  • 实时数仓及olap可视化构建(基于mysql,将maxwell改成seatunnel可以快速达成异构数据源实
    1.OLAP可视化实现(需要提前整合版本)Linux121Linux122Linux123jupyter✔spark✔✔✔python3+SuperSet3.0✔hive✔ClinckHouse✔Kafka✔✔✔Phoenix✔DataX✔maxwell✔Hadoop✔✔✔MySQL✔......
  • 解决linux将csv连入mysql数据库的问题
    创建一个csv文件路径在/opt/module/data/123.csv0.登入数据库:mysql-uroot-p123456root是用户名 123456是密码1.使用数据库(user库[自己创建的库])(以下都是mysql操作)useuser;2.在mysql数据库中创建对应表(最好别设置主键和限制,csv数据不一定干净)create tablestud......
  • FreeSQL学习
    FreeSQL是一款功能强大的对象关系映射组件,它支持.NETCore2.0+和.NETFramework4.0+。它允许开发者通过简单的接口连接和操作多种类型数据库,包括但不限于MySQL/PostgreSQL/SQLServer/SQLite等。FreeSQL主要特点包括:1.多数据库支持:FreeSQL支持多种数据库系统,包括MySQL/PostgreS......
  • Linux常用命令——su 命令详解
    Linux常用命令——su命令详解命令介绍:su命令在Linux系统中用于切换用户身份。它是系统管理员和高级用户常用的命令,支持多种选项来控制身份切换过程。基本语法:su[选项][用户名]常用选项和参数:-:切换到指定用户并加载该用户的环境变量,类似于重新登录。示例:su-......