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的(有限的)知识,那里是否有必要做同样的事情,所以我怀疑是否有更好的方法,但是我想检查一下,因为我不太了解这些东西好吧,看起来笨拙。
答案 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。