如果MyBatis 3中where_in子句为空,如何跳过查询?

硫酸
select * from users where id in ()

查询如上所示。

<select id="getByIds" resultMap="BaseResultMap">
    SELECT
    <include refid="BaseColumnList"/>
    FROM users
    WHERE id IN
    <foreach item="id" collection="ids"
             open="(" separator="," close=")">
        #{id}
    </foreach>
</select>

如果参数ids为空,则Mybatis将抛出BadSqlGrammarException,这将生成类似“ select * from users where id in的查询

如果ids为空,如何跳过查询并返回空列表

黑巫师

如果id为空,如何跳过查询并返回空列表?

跳过查询(不执行查询),只需不调用Mybatis。调用代码应检查id是否为空:

return null == ids || ids.isEmpty() ? new ArrayList<User>() : session.select("getByIds", ids);

这正是问题中要问的。

如果您确实希望Mybatis处理此问题,则生成的查询必须有效,因为必须执行(然后不跳过)以快速返回空结果这意味着忘记类似的东西,id = <!-- a value that will never exist in the table -->因为它肯定会涉及(免费和无用的)全面扫描来搜索不存在的值。然后:

    WHERE 
    <choose>
        <when test="ids==null || ids.isEmpty()">
            1 = 0 <!-- a test returning false, to adapt depending on you DB vendor -->
        </when>
        <otherwise>
            id IN <foreach item="id" collection="ids" open="(" separator="," close=")">#{id}</foreach>
        </otherwise>
    </choose>

确认的另一种选择是使用拦截器在执行查询之前“取消”查询,但是对于必须在此处实现的操作,这肯定是过分复杂的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果输入数组为空或在猫鼬聚合中不退出,如何跳过查询执行

如果它们为空,如何跳过文件中的行

如果GraphQL中的变量为null,如何跳过查询?

如果值为空,如何跳过逗号?

如果在Spring Data JPA中为空或为空,如何跳过@Query中的@Param

如果添加到 where 子句的参数为空,则从 db 中获取所有行

如果字段值为空,则排除where子句中的列

如果为空,则跳过字段

如果为空则跳过记录

如果为空[在php中],如何从检索中跳过图像字段?

如果var为null或为空,如何跳过/忽略terraform中的特定模块

如果变量为空,如何跳过 Make 目标?

数组中的Powershell跳过元素(如果为空)

如果 Laravel 没有提供查询,如何忽略“where 子句”

如果我使用myBatis,从几乎相同的表中提取时,如何删除大量重复的代码

如果参数为``NOT PASSED'',如何避免在``where''子句中的列

如果数组中的一个值在 PHP 中为空,如何跳过一个动作并继续前进

如果它们为空,则跳过这些值

如果数据框中的列为空,如何创建条件子句?

如果 mysql 查询的结果数组为空,则跳过循环以填充表单

如果列表中的整数为零,如何跳过“句子”?

如果在 LEFT JOIN 和 WHERE 子句中找不到结果,如何在 MySQL 查询中返回 NULL 值

Spring Data JPA查询中如果参数为空,如何避免AND条件

TSQL:如果记录为空,如何从查询结果中删除最后一条记录

条件选择查询,如果coulmn中的值为空

如果条目为空,则忽略查询中的值

猫鼬:如果为空,则忽略查询中的参数

如果组为空,则从查询中删除结果

如何在 Ruby on Rails 中进行查询,如果表单中的任何参数为空,则查询不会检查此参数?