MyBatis<choose>动态SQL用法详解
更新时间:2025年09月21日 15:59:33 作者:night_gu
MyBatis <choose>动态SQL标签用于多条件分支查询,按顺序判断<when>条件,仅执行第一个匹配项,无匹配则执行<otherwise>,与<if>不同,它不拼接所有满足条件的片段,适用于优先级排序、枚举处理等场景
MyBatis<choose>动态SQL
<choose> 是 MyBatis 动态 SQL 中的一个标签,用于实现类似 Java 中的 switch-case 逻辑。
它通常与 <when> 和 <otherwise> 配合使用,根据条件选择不同的 SQL 片段执行。
基本语法结构
<choose>
<when test="condition1">
<!-- SQL 片段1 -->
</when>
<when test="condition2">
<!-- SQL 片段2 -->
</when>
<otherwise>
<!-- 默认 SQL 片段 -->
</otherwise>
</choose>
使用示例
假设需要根据不同的查询条件动态生成 SQL:
<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>
工作原理
- 按照
<when>标签的顺序依次判断条件表达式 - 当某个
<when>的test条件为 true 时,会执行对应的 SQL 片段 - 如果所有
<when>条件都不满足,则执行<otherwise>中的 SQL - 如果没有
<otherwise>且所有条件都不满足,则不插入任何 SQL
注意事项
- 每个
<when>标签的test属性值是 OGNL 表达式 - 可以使用复杂的条件判断,包括逻辑运算符和对象属性访问
- 只会选择第一个满足条件的
<when>分支执行 <otherwise>是可选的,不是必须的
与 if 标签的区别
<if> 标签会检查所有满足条件的片段并拼接,而 <choose> 只会选择第一个满足条件的片段执行。例如:
<!-- if 标签示例:可能拼接多个条件 -->
<if test="title != null">AND title = #{title}</if>
<if test="author != null">AND author = #{author}</if>
<!-- choose 标签示例:只选择第一个满足的条件 -->
<choose>
<when test="title != null">AND title = #{title}</when>
<when test="author != null">AND author = #{author}</when>
</choose>
实际应用场景
- 多条件优先级查询
- 根据不同参数值选择不同的排序方式
- 实现类似枚举值的条件分支
- 处理复杂的业务逻辑分支
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
详解Springboot工程中如何快速判断web应用服务器类型
在 Spring Boot 工程中快速判断 Web 应用服务器类型,可以从运行时环境、Spring Boot 特有 API、底层类加载器、HTTP 响应和外部命令等多个层面入手,下面小编就和大家简单介绍一下吧2026-04-04
浅析 ArrayList 和 LinkedList 有什么区别
ArrayList 和 LinkedList 有什么区别,是面试官非常喜欢问的一个问题。今天通过本文给大家详细介绍下,感兴趣的朋友跟随小编一起看看吧2020-10-10
Javaweb使用thymeleaf局部刷新结合Layui插件实现Html分页
本文主要介绍了Javaweb使用thymeleaf局部刷新结合Layui插件实现Html分页,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-10-10
SpringCloud 中防止绕过网关请求直接访问后端服务的解决方法
这篇文章主要介绍了SpringCloud中如何防止绕过网关请求直接访问后端服务,本文给大家分享三种解决方案,需要的朋友可以参考下2023-06-06


最新评论