mybatis的if条件中判断false/0

本文记录了一次解决MyBatis查询中布尔字段导致的数据显示错误的过程,通过调整Service层和XML配置,最终修复了“未派车”状态查询不准确的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天测试提的一个bug,我一度怀疑是他估计搞事情,后来发现是真的存在,

描述:

页面上有三个键: 全部, 已派车, 未派车 ,单选框,顾名思义,全部包含已派车和未派车,

bug的来源是点击未派车的时候搜出出来的数据是错误的

我在没有看代码开日志的时候就想了,要错就全错,不可能就一种选项错吧,然后我就看日志,发现当选择未派车的时候

该字段对应的是false,在日志中,这个字段没有加入到查询条件中,但是当true的时候是对的


我在service层打印了一下值,是false没有错.于是我在service层做了判断,如果true就变成1,false就变成0.因为数据库中布尔值就是0和1,

(sqlserver数据库),

entity.put("pcyes", "true".equals(entity.getString("pcyes"))? 1 : ("false".equals(entity.getString("pcyes")) ?0:"" ) );

重启后还是不正确,依旧无法判断0;

接下来

service层没错,继续下去就是xml文件了,该条件的代码如下:

 <if test="pcyes!= null and pcyes!=''">
			<![CDATA[ AND  T_CAR_OUT.pcyes = #{pcyes} ]]>
		</if>
 我没认为我的判断是错误的,但是既然false/0是进不来的,service层都有数据,只有这里错了,我考虑了一下,就先取掉了

pcyes!='',

 <if test="yipai != null">
			<![CDATA[ AND  T_CAR_OUT.pcyes = #{yipai} ]]>
		</if>

没想到真的成功了,好坑,

然后上网查了一下,这里确实是个坑:

参考自:

http://blog.youkuaiyun.com/lich1n/article/details/73511180


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值