mybatis传0不生效问题

472 阅读1分钟

问题

开发时controller接收一个Byte类型的值,到mapper进行select动态查询,值不为空的时候加上条件,为空不加:

	<if test="closeStatus != null and closeStatus != ''">
		is_close=#{closeStatus}
	</if>

测试时发现,当传的值为0时条件不生效,其他值正常执行

解决

经过百度发现,是mybatis判断代码自动把数字0和空字符串都转换成了double 0.0,所以最终结果closeStatus != ''为false,去掉后面的空字符串判断即可解决:

	<if test="closeStatus != null">
		is_close=#{closeStatus}
	</if>

产生问题mybatis中主要代码:

	double dv1 = doubleValue(v1); //0变为double 0.0
	double dv2 = doubleValue(v2); //''变为double 0.0
    return dv1 == dv2 ? 0 : (dv1 < dv2 ? -1 : 1);