两个条件,当第二个条件没有值;
select * from tb_user where sex = 1 and name like ‘%%‘ 查询所有sex=1,后面的模糊查询失效,匹配所有(因为为空串)
select * from tb_user where sex = 1 and name like ‘% %‘ 查询所有的sex=1 而且name= ” ” 匹配空格,与本意相悖,查不到
select * from tb_user where sex = 1 and name like ‘%null%‘ 查询所有的sex=1 而且name=null 匹配null, 与本意相悖,查不到 ,而且当不赋值时,传空引用null,如果使用mybatis,在映射文件中会报错
以上陷入误区,本意是后面的不赋值, 也就是不作为条件,而不是给null/给空格/给空串
正确表达: 动态sql //使用if标签, 没有值就不拼接这段sql
<!-- queryMaleUserByUserName 查询男性用户,如果输入了用户名,就按照用户名模糊查询 --> <select id="queryMaleUserByUserName" parameterType="User" resultType="User"> select * from tb_user where sex = 1 <if test="userName!=null and userName!=‘‘"> and user_name like "%"#{userName}"%" </if> </select>
使用双引号,或使用单引号并且空格,正确
select * from tb_user where sex = 1 and user_name like ‘%‘ #{userName} ‘%‘ 传入参数后的效果 select * from tb_user where name like ‘%‘ ‘张‘ ‘%‘ (其实是一种拼接的形式了) 以上,使用单引号要有空格 ,如果是双引号则不用,"%"#{userName}"%" ,#{}在传参后给参数拼接上引号,拼的是单引号
使用单引号,没有空格的情况下下,错误
select * from tb_user where sex = 1 and user_name like ‘%‘#{userName}‘%‘ 传入参数的效果,被当做‘?整体去查找,查的是‘?‘,根本没这玩意 select * from tb_user where name like ‘%‘‘张‘‘%‘
原文:https://www.cnblogs.com/wenhui2015/p/14528345.html