我们在使用mybatis框架执行sql语句进行数据库操作时,会在xxxMapper.xml映射文件下进行sql标签语句执行。
如下当我们在idea中自动注释 对于其中一个为空 的语句,一般我们在idea中按下ctrl+/来自动注释 但是虽然是注释
<!--if和where-->
<select id="findUserList" parameterType="per.yyt.vo.UserQueryVo" resultType="per.yyt.model.User">
select * from user
<where>
<if test="user != null ">
<if test="user.sex !=null and user.sex !=''">
sex=#{user.sex}
</if>
-- 对于其中一个为空
<if test="user.username !=null and user.username !=''">
AND username like '%${user.username}%'
</if>
</if>
</where>
</select>
问题:
但是由于执行动态sql语句时:
- If标签:作为判断入参来使用的,如果符合条件,则把if标签体内的SQL拼接上。
注意:用if进行判断是否为空时,不仅要判断null,也要判断空字符串‘’;
- Where标签:会去掉条件中的第一个and符号。
但如果我们这样在标签中进行了注释 则系统无法自动把and去除 所以sql语句就无法执行成功,因为其执行的是如下语句
### SQL: select * from user WHERE -- 对于其中一个为空 AND username like '%明%'
这样就没有去除and这个符号
解决:
所以我们在xml注释时 为了规范所以都写成:
<!--注释内容-->
以防不小心吭吭啦