我好像发现mp的一个bug

来源:-

weixin_慕村5344383

2020-08-06 17:10

lambdaQueryWrapper.eq(StringUtil.isNotEmpty(xxx),Dto::getXX,new BigDecimal(xxx));

我遇到的情况类似于这个

代码的场景是 我需要判断xxx是否是空字符串,如果是空字符串,不进行拼接sql,如果不是,转换为BigDecimal

但是如果我现在发现,当condition为false时,mp也会检查后面代码的合理性,这个好像有点不合理。


类似于下面的代码:


 lambdaQueryWrapper.eq(false,Dto::getXX,BigDecimal.ONE.divide(BigDecimal.ZERO));


当我第一个参数为false时,mp会检查1除以0的合理性

按理说,应该是类似于 

if(A && B){}

当A为false时,B都直接不会运行到才对。

写回答 关注

2回答

  • 老猿
    2020-08-09 16:26:19
    已采纳

    这个我认为不是bug,你的说那个短路与实现的效果,那是基于java语法层面的,mp基于应用层面,实现不了你说的这种需求。lambdaQueryWrapper.eq(StringUtil.isNotEmpty(xxx),Dto::getXX,new BigDecimal(xxx));这个方法,会根据第一个条件是否为true来判断,这句是否加入到sql中,但不能做短路处理。

  • weixin_慕村5344383
    2020-08-12 14:59:24

    收到,感谢~

MyBatis-Plus入门

MyBatis-Plus框架入门必学课程!

56140 学习 · 381 问题

查看课程

相似问题