mybatis踩坑 select返回boolean

mybatis踩坑

问题的产生

我使用的mybatis版本为1.3.1,比较老了。

有个接口需要判断表中某条数据的某个字段是否为空或null,原本采用的是IFNULL方法判断

select IFNULL((select A from user where B=#{B} limit 1),0)

当字段A为空时返回0,字段不为空返回查询结果。根据网上博客,select返回值如果设置为boolean,会根据查询到的记录数,0返回false,否则返回true。于是我认为上述sql语句满足该条件,即查询结果为空返回0,mybatis转换false,否则为true,xml代码:

<select id="test" parameterType="string" resultType="boolean">
    select IFNULL((select A from user where B=#{B} limit 1),0)
</select>

其中字段A为String类型。但是问题就处在这里,String转Boolean出现了问题。如果按照其他博客所说根据查询结果个数判断返回值,那么这里应该不会出现问题,可是出现了问题。

问题的解决

由于只是初学mybatis,并不是很明白返回值的转换原理。这些讲返回Boolean的博客也是互相抄袭,sql语句都一模一样,不过我发现他们sql中是利用count来判断数据是否存在的。我只能理解成,他们所说的“mybatis根据select的记录数转换boolean”这句话中的记录数,就是sql中count得到的数据,这么一来才解释的通。

于是我也将sql语句改成了count

select count(A) from user where B=#{B} limit 1

但是count耗费性能,由于没想到更好的解决方案只能凑合用了(这里也可以更改service层的代码,但工作量相对大不少)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值