我经常从列表中查询记录列表。例如:
有一个列表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>
但list
不应为空,否则SQL将变为SELECT * FROM table1 where id in ()
,SQL将抛出异常。
为了在list
为空或空时返回空记录,我将SQL更改为使用where 1=2
使sql返回为空。
<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>
我关注where 1=2
。使用它是一个好习惯吗?有没有其他方法可以解决我的问题?
答案 0 :(得分:1)
处理此问题的更好方法是,如果已知查询将返回空列表的空结果集,则根本不执行查询。
这将节省您到数据库的往返,执行查询(您已经知道结果)和映射结果。
答案 1 :(得分:0)
在执行方法,功能和/或程序之前,应在之前检查 。否则只是随便调用它。