当前使用版本(必填,否则不予处理)

3.4.2 mybatis-plus-core-3.4.2.jar window10 jdk8 spring-boot-2.2.13.RELEASE.jar mysql5.6

该问题是如何引起的?(确定最新版也有问题再提!!!)

Lambda的between条件condition为false 不应执行后面的 value值计算 (最新版不确定,但是你们只管最新版也是不合理的个人认为。)

重现步骤(如果有就写完整)

我来给个示例吧:我们的理解between的condition不能执行后面的value值计算,实际上执行了报NPE了

期望:

  boolean hasCreateDt = qry.getCreateDt() != null && qry.getCreateDt().size() == 2;
*.between(hasCreateDt, ProjectOrderRelationDO::getCreateDt,qry.getCreateDt().get(0),qry.getCreateDt().get(1))

实际:

 boolean hasCreateDt = qry.getCreateDt() 
*.between(hasCreateDt, ProjectOrderRelationDO::getCreateDt, hasCreateDt?qry.getCreateDt().get(0):null, hasCreateDt?qry.getCreateDt().get(1):null)

实际这个Issue(#4657) 已经写出来了,就是我们认为condition为false ,mp不该去执行后面的值计算,理应忽略这个Lambda式子。

Lambda的between条件构造失效 #4657 https://github.com/baomidou/mybatis-plus/issues/4657

报错信息

NPE

Comment From: miemieYaho

回炉重修java

Comment From: SSSDNSY

回炉重修java

本人确实能力浅薄,您既然回复了,请大佬给出具体做法,感谢。

Comment From: VampireAchao

https://gitee.com/baomidou/mybatis-plus/issues/I5GHIP#note_11545834_link

Comment From: lipengkun111

你调between方法的时候第三个参数是不是得算出来,才能进入到between内部。第三个参数计算得时候已经报错了,还没有进入between方法内部呢