Mybatis动态sql传入int类型值为0时存在的问题.

下午开发时遇到了一个问题,解决了很久,最后经过同事帮助得以解决.

存在的问题:

同一个方法,传入不同的type值按类别来查找, 传入1可以准确找出, 传入0时却是查找出了全部数据.

int left = checkoutConsoleService.queryConsoleCount(0); //查出全部数据
	    
int right = checkoutConsoleService.queryConsoleCount(1); //准确查找出
<select id="queryConsoleCount" parameterType="int" resultType="int">
     select count(id) from t_d_checkout_console a
     where 1=1
     <if test=" _parameter !=null and _parameter !=''">
         AND a.type = #{_parameter}
     </if>
</select>

问题解决:

动态sql判断有问题,因为大多数字段都是String,属于引用类型,所以都是用not in {null, ''}来判断传入的参数是否为空。当传入的是int类型的数字0时,mybatis似乎会把它当成空字符串,所以动态sql没有拼接上。

修改成!= null之后就能正常传入0了

<select id="queryConsoleCount" parameterType="int" resultType="int">
    select count(id) from t_d_checkout_console a
    where 1=1
    <if test=" _parameter !=null">
         AND a.type = #{_parameter}
    </if>
</select>

学到的东西:

1.mapper配置文件中 当只传入一个值时, 需要使用_parameter 来当作传入的字段.

否则就会出现这个问题:

There is no getter for property named 'subjectId' in 'class java.lang.Intege

2.上述问题的解决

3.学会在debug过程中看日志信息来精准的判断问题

PS:

今天也是第一次在CSDN写博客, 希望自己能一直坚持写下去,慢慢成长吧.

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值