Sql 在MyBatis中使用“where 1=2”查询空列表是一种好做法吗?

Sql 在MyBatis中使用“where 1=2”查询空列表是一种好做法吗?,sql,mybatis,Sql,Mybatis,我经常从列表中查询记录列表。例如: 有一个列表list=[1,2,3] Mybatis中的SQL定义: <select id="selectByIds" parameterType="java.util.List" resultType="..."> SELECT * FROM table1 WHERE id in <foreach collection="list" index="index" item="id" open="(" close=")"

我经常从列表中查询记录列表。例如:

有一个列表
list=[1,2,3]

Mybatis中的SQL定义:

<select id="selectByIds" parameterType="java.util.List" resultType="...">
    SELECT * FROM table1
    WHERE id in
    <foreach collection="list" index="index" item="id" open="(" close=")" separator=",">
        #{id}
    </foreach>
</select>

我担心
中的1=2
。使用它是一种好的做法吗?有没有其他方法可以解决我的问题?

更好的方法是,如果知道查询将返回空列表的空结果集,则根本不执行查询


这将为您节省到数据库的往返、查询的执行(您已经知道查询的结果)和映射结果。

更好的处理方法是,如果知道查询将为空列表返回空结果集,则根本不执行查询


这将为您节省到数据库的往返、查询的执行(您已经知道查询结果)和映射结果。

在一般情况下,在执行方法、函数和/或过程之前,应检查。否则它只是随机调用。

在一般情况下,在执行方法、函数和/或过程之前,应检查。否则它只是随机调用。

实际情况可能更复杂,例如作为
联合的一部分的列表查询,您无法确定最终结果是否为空。如果它是联合的一部分,则最好将联合的该分支包装在
choose/when
中。实际情况可能更复杂,例如作为联合的一部分的列表查询,您无法确定最终结果是否为空。如果它是联合的一部分,则最好在
选择/when
中包装联合的该分支。
<select id="selectByIds" parameterType="java.util.List" resultType="...">
    SELECT * FROM table1
    WHERE 
    <choose>
        <when test="list!=null and list.size()>0">
            id in
            <foreach collection="list" index="index" item="id" open="(" close=")" separator=",">
                #{id}
            </foreach>
        </when>
        <otherwise>
            1=2
        </otherwise>
    </choose>
</select>