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>