MyBatis -Where 子句中的嵌套条件

2024-01-04

我在 MyBatis v3 映射器 xml 中动态生成 where 子句。不过加括号确实很麻烦。有没有更简单的方法来处理这个问题而不使用 if 语句?

<where>
  <if test="filter != null">
    <choose>
      <when test="filter.lref != null">
        file.lref = #{filter.lref}
      </when>
      <otherwise>
        <!-- I don't want to use this -->
        <if test="filter.forLike != null || filter.forInt != null">
          ( 
        </if>
        <if test="filter.forLike != null" >
          subject LIKE #{filter.forLike}    
          OR requester_identifier LIKE #{filter.forLike}
          OR requester_name LIKE #{filter.forLike}
        </if>
        <if test="filter.forInt != null">
          OR file_id = #{filter.forInt}
        </if>

        <!-- I don't want to use this -->
        <if test="filter.forLike != null || filter.forInt != null">
          ) 
        </if>
      </otherwise>
    </choose>
  </if>
  <if test="listMode > 0">
    <choose>
       <when test="listMode == 1">
         AND file_status_link.dosya_ref is not NULL
       </when>
       <otherwise>
         AND file_status_link.dosya_ref is NULL
       </otherwise>
    </choose>
   </if>            
</where>

动态生成的 SQL 输出示例如下

WHERE ( subject LIKE ? OR requester_identifier LIKE ? OR requester_name LIKE ? ) 
AND file_status_link.dosya_ref is NULL 

您可以尝试将该部分封装在里面<trim>标签。它会是这样的:

<trim prefix="(" prefixOverrides="OR" suffix=")">
  <if test="filter.forLike != null" >
    subject LIKE #{filter.forLike}    
    OR requester_identifier LIKE #{filter.forLike}
    OR requester_name LIKE #{filter.forLike}
  </if>
  <if test="filter.forInt != null">
    OR file_id = #{filter.forInt}
  </if>
</trim>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis -Where 子句中的嵌套条件 的相关文章

随机推荐

  • python中高效统计词频

    我想计算文本文件中所有单词的频率 gt gt gt countInFile test txt 应该返回 aaa 1 bbb 2 ccc 1 如果目标文本文件如下 test txt aaa bbb ccc bbb 我已经用纯 python 实
  • 如何在JUnit 5的“@BeforeEach”方法中打印“要执行”的@Test方法的名称?

    我知道我们可以在 JUnit 4 中使用 Rule and TestName但是我正在使用 JUnit 5 Jupiter 并且正在努力寻找一种方法来打印测试方法 要执行的 名称 BeforeEach method 声明一个TestInfo
  • 寻找使用 git-format-patch 和 git am 的工作流程示例

    我正在考虑让我的学生使用 git 进行结对编程 由于学生的工作必须保密 因此不可能公开回购 相反 每个学生都会有一个他们自己维护的私人存储库 并且他们需要使用 git format patch 交换补丁 我已经阅读了手册页 但我有点不清楚w
  • 导入错误:没有名为 virtualenv 的模块

    我在 windows7 上使用 Django 1 3 7 和 python 2 7 6 当我在这行代码中执行manage py时出现错误 import shutil sys virtualenv subprocess amd 运行它 我收到
  • 我如何引用values.yaml中的命名空间?

    我希望能够引用当前的命名空间values yaml使用它来为某些值添加后缀 如下所示 in values yaml someParam someval Release Namespace 以这种方式定义它比进入我的所有模板并添加要好得多 R
  • Jquery mobile t.split 不是一个函数

    我正在开发一个网站 该网站从数据库动态获取内容并将其放入 HTML 代码中 该代码应由 JQuery Mobile 页面组成 这样我可以单击链接 它将滑动到相应的页面 我正在运行 JQuery 1 9 1 和 JQuery Mobile 1
  • 使用 SQSH 对名称中包含空格的表进行 SELECT 查询

    我在 Ubuntu 10 04 上使用 SQSH 版本 2 1 通过如下命令连接到 MSSQL 数据库 sqsh S server U user P password D database 我有一个名为 我的表 的表 但我找不到对其运行 S
  • 在 MVC 4.0 中实现动态操作的路由

    是否可以在 MVC 中定义一个路由 根据部分路由动态解析操作 public class PersonalController public ActionResult FriendGroup code public ActionResult
  • C++ 中具有双缓冲区的单生产者、单消费者数据结构

    我在 work 有一个应用程序 我必须在以不同频率调度的两个实时线程之间移动 实际的调度超出了我的控制范围 应用程序是硬实时的 其中一个线程必须驱动硬件接口 因此线程之间的数据传输应该是无锁和无等待的可能的程度 需要注意的是 只需要传输一个
  • 为什么 Perl 文件 glob() 不能在标量上下文中的循环之外工作?

    根据有关文件通配的 Perl 文档 运算符或 glob 函数在标量上下文中使用时 应迭代与指定模式匹配的文件列表 每次调用时返回下一个文件名或undef 当没有更多文件时 但是 迭代过程似乎只能在循环内进行 如果它不在循环中 那么它似乎在读
  • 如何判断 XSD 文件中的 XML 元素是否被标记为必需

    我需要在 XSD 架构中将某些元素标记为非必需元素 我如何弄清楚哪些元素被标记为必需 是否有我应该搜索的特定标志 目前我的所有元素都标记为minOccurs 0 这是需要改变的吗 Yes minOccurs 0 是您需要添加到元素中的可选内
  • T-SQL层次结构查询

    I have a table with hierarchical data 这是包含 id 父 id 名称 代码 有时未填充 级别和 isroot 列的数据示例 在实际场景中 级别会多于 2 个 但现在让我们看一下简化的示例 我需要做的是循
  • pdo_oci make 不起作用

    最近我将 opensuse 12 3 更新到了较新的 13 1 不幸的是 我无法编译所需的 pdo oci so 使用本指南 您可以在 12 3 上编译扩展 http forums opensuse org english other fo
  • Excel 2013 VBA 代码中的特殊字符(字母 čćžšđ)

    我在 Excel 2010 VBA 中编写了一个程序 其中包含像 这样的字母 Msgbox i a gli a works 看起来 Excel 2013 支持单元格和公式中的这些字母 但在 VBA 中则不然 VBA 用一些键盘上没有的符号替
  • ASP.NET AJAX 调用中的 Response.Redirect

    我在 UpdatePanel 中有一个按钮 如果单击该按钮 在某些情况下会将用户重定向到同一文件夹中的另一个页面 否则将使用一些信息更新 UpdatePanel 如果我以这种方式进行重定向 Response Redirect Test as
  • 类库中的实体框架代码优先

    今天早上我刚开始尝试 EF4 代码 并在单独的类库中创建了 POCO 数据上下文和初始化器类 我相信这是常规的样板类型代码 我在 MVC3 应用程序中引用该类 并在 Global asax 中设置初始值设定项 运行应用程序时 我注意到以下问
  • Excel for Mac 2016 的 xlwings

    我正在使用 mac OS X Sierra 和 Mac for Excel 2016 和 python 3 6 我正在尝试从 excel 启动 python 脚本 因为 我已经有一个具有很多功能的 Excel 我想使用 Python 向该产
  • std::map insert() 提示位置:c++98 和 c++11 之间的区别

    On cplusplus 在 map insert 上的条目 http www cplusplus com reference map map insert 我读到了可以添加的位置作为函数的提示 即 函数优化其插入时间 如果position
  • 移动重叠间隔直到没有重叠的算法

    我有一个重叠间隔的排序列表 间隔永远不会相互包含 例如 7 11 9 14 12 17 输出的约束是让每个元素尽可能接近它的 原点 间隔的中间 保留输入的顺序 并删除所有重叠 只有一个 需要近似解 示例输入的预期结果为 5 9 9 14 1
  • MyBatis -Where 子句中的嵌套条件

    我在 MyBatis v3 映射器 xml 中动态生成 where 子句 不过加括号确实很麻烦 有没有更简单的方法来处理这个问题而不使用 if 语句