Mybatis查询参数有0时,数据异常。求教为什么。

明明都知道 2017-04-20 11:19:01
我在做毕业设计的过程中,发现,当查询参数有0时,mybatis查询结果不正确。
mapper 配置如图
当途中的status是0时,查出来的数据不对,1,2,3,4都正确。
请熟悉mybatis的大神们指点下。
...全文
653 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hansq_rokey 2018-01-24
  • 打赏
  • 举报
回复
改成 <if test="null != status and (status==0 ? '0' : status)"> AND A.STATUS = #{status} </if>
Jas_wen 2017-05-15
  • 打赏
  • 举报
回复
又学到些知识
明明都知道 2017-05-11
  • 打赏
  • 举报
回复
引用 6 楼 qq_38039130 的回复:
integer对象,为零则为空,对象判断用equals,传入参数放在括号里,"".equals(参数),不然值为空就会报空指针!你如果作为查询条件,一般query中用int,可以避免null
谢谢指导
明明都知道 2017-05-11
  • 打赏
  • 举报
回复
引用 5 楼 u014038116 的回复:
Mybatis Integer类型,值为0被认为是空字符串,而且你都知道是Integer类型了,为啥还要判断!=''?
谢谢指导,以前不知道这点,现在知道了
明明都知道 2017-05-11
  • 打赏
  • 举报
回复
引用 7 楼 zjwstz 的回复:
小伙子,你正在犯兵家之大忌,如果不是order by语句,请使用 #,而不要使用$,例如${status}应该改为#{status},具体原因教程很多,自己体会一下
谢谢指导
qq_24597963 2017-04-24
  • 打赏
  • 举报
回复
为什么要用$ ?mybatis中取值不是用#的吗
MonkeyHou0529 2017-04-21
  • 打赏
  • 举报
回复
integer对象,为零则为空,对象判断用equals,传入参数放在括号里,"".equals(参数),不然值为空就会报空指针!你如果作为查询条件,一般query中用int,可以避免null
xiaovhao 2017-04-21
  • 打赏
  • 举报
回复
Mybatis Integer类型,值为0被认为是空字符串,而且你都知道是Integer类型了,为啥还要判断!=''?
  • 打赏
  • 举报
回复
在mybatis中使用$转换的sql语句没有双引号,使用#是有的,可以试试用#; 并且integer(0)就是什么都没有,NULL,是空集,和int(0)不是一回事儿.
zjwstz 2017-04-21
  • 打赏
  • 举报
回复
小伙子,你正在犯兵家之大忌,如果不是order by语句,请使用 #,而不要使用$,例如${status}应该改为#{status},具体原因教程很多,自己体会一下
明明都知道 2017-04-20
  • 打赏
  • 举报
回复
引用 3 楼 m0_37229428 的回复:
[quote=引用 2 楼 lrx2011 的回复:]
在数据库先查一下,和用代码执行的结果比较

在数据库直接查询是正常的,当我把数据库status为0 的值全部改为其他,比如4,再把mybatis的参数设置为4,测试结果正确。奇怪的现象截图如下


[/quote]

上面的正常情况,奇怪现象如下
明明都知道 2017-04-20
  • 打赏
  • 举报
回复
引用 2 楼 lrx2011 的回复:
在数据库先查一下,和用代码执行的结果比较

在数据库直接查询是正常的,当我把数据库status为0 的值全部改为其他,比如4,再把mybatis的参数设置为4,测试结果正确。奇怪的现象截图如下


podd 2017-04-20
  • 打赏
  • 举报
回复
在数据库先查一下,和用代码执行的结果比较
明明都知道 2017-04-20
  • 打赏
  • 举报
回复
补充:status参数是Integer,MySQL数据库字段类型是int

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧