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层的代码,但工作量相对大不少)。

发布了26 篇原创文章 · 获赞 26 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/IOT_player/article/details/105241006