我们再写SQL语句的时候经常会使用条件筛选,那么在MyBatis中使用where和<where>标签到底有什么区别呢?
<select id="getList" resultType="ComplainListVO">
SELECT
id
FROM
complain
<where>
<if test="id!=null and id!=''">
create_user_id = #{id}
</if>
<if test="tenantId!=null and tenantId != ''">
AND tenant_id = #{tenantId}
</if>
</where>
</select>
对于上述代码
1.使用<where>标签时,第一个<if>标签里的id为空不执行的时候,该sql语句等价于如下代码:
SELECT id FROM complain where tenant_id = #{tenantId}
使用<where>标签会自动忽略掉 and 和 or,条件不满足时不会出现SQL异常
2.当使用where语句判断的时候,第一个<if>标签里的id为空不执行的时候,该sql语句等价于如下代码:
SELECT id FROM complain where and tenant_id = #{tenantId}
当使用where判断条件的时候,若前面条件为空时,对于上述代码会报出SQL语法错误
总结:在使用MyBatis的时候采用<where>标签代替where