当前位置: 首页 > news >正文

MyBatis choose when otherwise

在MyBatis中,<choose><when><otherwise>结构用于处理XML映射文件中的条件逻辑,而<case>元素通常与<trim><where><set>等元素结合使用,以修改SQL语句。<choose><case>的用途和结构不同,不应互换使用。

<choose><when><otherwise>

  • 用途: 实现类似于Java中的switch-case语句的条件逻辑。
  • 结构:
     
    <choose>
        <when test="condition1">
            <!-- 如果condition1为真则执行的SQL -->
            SQL语句1
        </when>
        <when test="condition2">
            <!-- 如果condition2为真则执行的SQL -->
            SQL语句2
        </when>
        ...
        <otherwise>
            <!-- 如果没有条件为真则执行的SQL -->
            默认SQL语句
        </otherwise>
    </choose>

  • 使用场景: 当你需要在不同条件下执行不同的SQL块时使用。

<case>

  • 用途: 与<trim><where><set>一起用于动态构建SQL语句的一部分。它不用于独立的条件逻辑。

  • 结构<case>元素本身不是独立的,通常嵌套在<trim><where><set>中。

  • 示例:

    <trim>结合使用:

    <update id="updateUserStatus" parameterType="map">
        UPDATE users
        <set>
            <trim prefixOverrides=",">
                <case test="status == 'ACTIVE'" value="1"/>
                <case test="status == 'INACTIVE'" value="0"/>
                <case test="status == 'DELETED'" value="-1"/>
            </trim>
        </set>
        WHERE id = #{id}
    </update>
     

主要区别

  • 目的
    • <choose>用于在不同条件下执行不同的SQL块。
    • <case>用于在动态SQL构建中根据条件设置特定值。
  • 用法
    • <choose>是独立元素,直接放在SQL中。
    • <case>嵌套在<trim><where><set>中,帮助修改SQL的一部分。
  • 上下文
    • <choose>用于需要选择整个SQL块或子句时。
    • <case>用于需要有条件地设置列值或在动态列表中包含条件时。

总结

  • 使用<choose><when><otherwise>来处理需要执行不同SQL块的条件逻辑。
  • 使用<case><trim><where><set>内根据条件动态设置值。

通过理解这些结构的区别和用途,你可以在MyBatis的XML映射中更有效地管理条件SQL执行。

相关文章:

  • 算法设计学习2
  • 【FreeRtos】任务调度器可以被挂起吗?
  • 【配电网】基于差分进化算法的含DG配电网无功优化模型
  • python技巧:自动控制高低温箱,通过串口输入命令,生成16进制字符串,并计算CRC16。
  • 4.1-3 模拟器
  • C#调用ACCESS数据库,解决“Microsoft.ACE.OLEDB.12.0”未注册问题
  • 计算机网络知识点汇总与复习——(一)计算机网络体系结构
  • 【408--考研复习笔记】计算机网络----知识点速览
  • Base64编码的优缺点
  • Redis原理:rename命令
  • 玩机搞机基本常识-------安卓机型各种root方式面面观 选择适合自己机型的root方式
  • 自然语言处理(26:(终章Attention 2.)带Attention的seq2seq的实现)
  • 人工智能图像识别大数据技术之Scala2
  • 工业通信协议“牵手密码”,Ethernet IP转Profinet网关的桥梁魔法
  • 体验智谱清言的AutoGLM进行自动化的操作(Chrome插件)
  • MySQL数据库中,tinyint(1) 和 tinyint 有什么区别
  • 深入剖析JavaScript多态:从原理到高性能实践
  • 基于R语言与MaxEnt的物种分布建模全流程解析:从算法优化到科研制图实战
  • C++编程指南32 - 模板编程时要避免过度约束以提高通用性
  • 蓝桥杯训练士兵
  • 人民网三评“网络烂梗”:莫让低级趣味围猎青少年
  • 四部门:到2025年底,全国行政村5G通达率超过90%
  • 外媒:初步结果显示,菲律宾前总统杜特尔特当选达沃市市长
  • 福州千余公共道路泊车位装“智能地锁”续:运营公司被责令改正并罚款
  • 铁路部门:确保沿线群众安全,焦柳铁路6个区段将陆续安装防护栅栏
  • 最美西游、三星堆遗址等入选“2025十大年度IP”