Mybatis test 条件表达式字符串比较问题

问题描述:

最近工作中有个修改任务,代码中使用了Mybatis条件表达式比较字符串。

参数:

@Data
public class QueryParam
{
    private String itemid;
    private String itemOption;
    ...
}

mybatis xml:

<select id = "sample1">
    select ...
    ...
    <when test="itemOption == 'A'">
       order by a.itemid
    <when>
    ...
</select>

测试的时候,给itemOption传了个参数"A"。

{...,"itemOption":"A"}

程序运行的时候报错:java.lang.NumberFormatException : For input string: "A"

问题解析:

一开始我百思不得其解,定义的参数类型是字符串,平时比较字符串就是这样写的,怎么会出错呢。后来同事提醒Mybatis是不是把'A'当成字符了,字符比较的时候会转成ASCII码比较。

我做了下试验:

把条件表达式改成

<when test="itemOption == 'Aa'">

然后参数值改成 Aa发送过去,正常了。由此可以看到,当被比较的常量单引号内只有一个字符时,Mybatis会把它当成字符型Character。两个以上的字符才会把它当成字符串。在‘Aa’后面引用一个不存在的方法(toStr),系统给出的提示也表明Mybatis把单个字符当Character了。

但是我就是要用单个的字符比较怎么办呢?经过查找和试验找到了两种方式:

①用Character的toString方法括号写不写都行

<when test="itemOption == 'A'.toString">

②再加一个空串

<when test="itemOption == 'A'+''">

这两种方法我试了都可以的,当然可能还有别的方法。

总结:

1,Mybatis条件表达式比较字符串时,单个字符常量会被当成Character对象,和传过来的值比较时会报错。

2,可以在常量后面加toString方法或者加空串来应对这种情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值