记一次马虎造成的问题:Mybatis传入的参数是字符串String,生成的SQL查询语句变成Boolean类型的ture

发布时间 2023-06-14 14:15:43作者: MrSuperChaos

记一次马虎大意导致的bug

今天在开发的时候,用Mybatis做查询的时候,发现无法获得正确的结果

参数传入的是String类型,但是经过Mybatis的If标签进行条件判断之后,参数变成了Boolean型,

即使在xml里面指定了类型,也会报参数转换异常,提示Boolean型无法转换为String类型

Mapper的方法如下,加了@Param注解也不起作用:

String querytotalSum(@Param("deptId")Long deptId, @Param("time")String time);

Mapper.xml代码如下:

    SELECT
        SUM(amount)  AS SUM
    FROM
        use_info ui
    WHERE
        ui.check_status=1
    <if test="time =! null and time != ''">
        AND
          ui.time LIKE CONCAT(#{time},'%')
    </if>

后来打断点,发现在Mybatis处理if里面的表达式时,对参数进行了运算后就变成Boolean型了

查找了一下午的相关配置和代码之后,没找到问题

后在论坛发帖求助,被他人指出问题所在:

if里面的test表达式里面判空语句写错了,time=! null,Mybatis没有报错,但是将这里作为赋值语句处理了,正确的写法应该是time != null,一时的马虎大意浪费了一个下午的时间,以后要引以为戒!