mybatis if标签判断问题 为何48=='0'?

丶轩 2018-12-31 06:00:55
最近遇到一个很奇怪的问题。
问题是这样的,业务流程里面有一块要显示用户的统计数据,但是有一个用户的统计数据明显出错,一看就是统计成了全部用户。
通过查询发现mybatis的if标签有如下判断


<if test="userId !='' and userId !=null and userId !='0'">
user_id = #{userId,jdbcType=BIGINT}
</if>


ID为48的的用户无法进入这条判断,简单的写了个测试类,发现0和48进不来这个判断


<if test="userId !='' and userId !=null">
user_id = #{userId,jdbcType=BIGINT}
</if>

于是就将这条不等于零的判断去掉了,去掉之后就可以了。
后面我查了查mybatis if标签判断问题 只查到了说如何判零,如何判字符串。
我很好奇 为何48这个数字也会这么特殊,我自己跟了一下mybatis的代码,没有找到具体的判断。
希望有大佬解答一下。
...全文
697 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lionsarmstrong 2019-01-02
  • 打赏
  • 举报
回复
楼上正解,比较字符串不要用== !=
幽饮烛 2019-01-02
  • 打赏
  • 举报
回复
字符的 0 对应的ASCII码就是 48,不要拿数字和 char 对比。
bcsflilong 2019-01-02
  • 打赏
  • 举报
回复

<if test="userId !='' and userId !=null and userId !='0'.toString()">
user_id = #{userId,jdbcType=BIGINT}
</if>


0 这里可以看作是一个常量
咸哼酒家 2019-01-01
  • 打赏
  • 举报
回复
<if test=" userId !=null"> user_id = #{userId,jdbcType=BIGINT} </if>
咸哼酒家 2019-01-01
  • 打赏
  • 举报
回复
userId !='' 适用于字符串,遇到int类型,直接跳出if判断,你的userId是bigint java里面int属于基本类型,和string可不一样
mybatis动态sql MyBatis是一种开源的持久层框架,它为Java程序员提供了一种简化数据库访问的方式。其中,动态SQL是MyBatis的一个重要特性,它允许用户根据不同的条件拼接SQL语句,从而实现更加灵活和可扩展的数据库操作。 在MyBatis中,动态SQL使用的主要方式是通过使用XML或注解来编写SQL语句。下面我将简单介绍一下MyBatis动态SQL的使用方法和常用的功能。 1. if标签:if标签是动态SQL中最常用的功能之一。它允许我们根据条件判断是否拼接SQL语句的一部分。使用if标签时,可以使用Java代码对条件进行判断,以决定是否添加对应的SQL片段。 例如: ```xml