问题
在Mybatis中,遇到入参类型为BigDecimal时,不为0的情况下用!=''方法可以正常判断,
但值为0时使用 !=''判定会出现问题。
BigDecimal fine_cash=new BigDecimal("0");//违约金
String bill_id="1001";
tmap.put("bill_id",bill_id);
tmap.put("fine_cash",fine_cash);
monthBillDAO.updateByBillID(tmap);//执行mybatis的SQL语句
<!-- 更新信息 -->
<update id="updateByBillID" parameterType="java.util.HashMap">
update t_month_bill
<set>
less_cash=#{less_cash},
<!-- 更新违约金 -->
<if test="fine_cash !=null and fine_cash !=''">
fine_cash=#{fine_cash},
shou_cash=total_cash+#{fine_cash},
</if>
</set>
where bill_id=#{bill_id};
以上执行时,不会进入违约金字段的if代码段中。
解决方案
1.去除if代码段中的and fine_cash !=''判定,改为
<if test="fine_cash !=null ">
2.传入前先将fine_cash值转换为String类型
BigDecimal fine_cash=new BigDecimal("0");//违约金
tmap.put("bill_id",bill_id);
tmap.put("fine_cash",fine_cash.toString());
monthBillDAO.updateByBillID(tmap);//执行mybatis的SQL语句