SELECT WHERE值可以为NULL,也可以不为NULL

时间:2019-06-03 18:52:32

标签: mybatis

MyBatis 3.4.6

我想根据Java对象中String字段的值查找记录。 Java字段和数据库都可以为null,当它们为null时,我想选择记录。下面的XML似乎可以工作:

  <select id='selectFoo' parameterType='foo' resultType='int'>
    SELECT id FROM foo WHERE
            (bar = #{bar} OR (bar IS NULL AND #{bar,jdbcType=VARCHAR} IS NULL)

我想知道这是否是正确的处理方式? (仅使用'bar =#{bar}'不能处理两个都为null的情况,我希望SELECT返回一条记录,但不会)。

根据我在MyBatis之外对JDBC的(有限的)知识,那里是否有必要做同样的事情,所以我怀疑是否有更好的方法,但是我想检查一下,因为我不太了解这些东西好吧,看起来笨拙。

1 个答案:

答案 0 :(得分:0)

那没错,但是对于MyBatis,我们通常编写...

WHERE
<if test="bar != null">bar = #{bar}</if>
<if test="bar == null">bar IS NULL</if>

WHERE
<choose>
  <when test="bar != null">bar = #{bar}</when>
  <otherwise>bar IS NULL</otherwise>
</choose>

有关更多实用示例,请参见doc