MyBatis-Plus之eq(boolean condition, R column, Object val)的eq(false, ...)

可能用MyBatis-Plus不多的朋友突然使用时,可能对eq(boolean condition, R column, Object val) 的 eq(false, ...)和ne傻傻分不清楚,认为eq是sql等于(=)匹配,然后就想当让认为eq(false, ...)是不等于(!=)匹配,然后就出各种问题,其实我们点到源码里可以清晰看到eq(false, ...)的含义

1、eq(boolean condition, R column, Object val) 的 eq(false, ...)


可以看到 eq(R column, Object val) 方法的默认值是true,我们可以传false进去,继续往里边看



可以理解到condition 的含义如下:

  • 当 condition 参数为 true 时,表示启用该等于条件,即表示将 column 和 val 进行等于比较,该条件能够生效
  • 当 condition 参数为 false 时,表示禁用该等于条件,即不会将 column 和 val 进行等于比较,从而该等于条件不能生效,并不意着sql的 !=。
    因此,在 eq(false, ...) 的情况下,eq后的等于(=)表达式不能生效,而 eq(true, ...) 则eq后的等于(=)表达式能够生效

2、ne(R column, Object val)

ne其实就是not eq的缩写,意味着不匹配条件(!=),才是真正的sql中的 !=
而ne也是有 ne(boolean condition, R column, Object val) 方法,可以对 condition 参数传入false,意思也为不启用该ne(!=)表达式,不传的话默认值亦为true,表示该条件生效。

3、总结

在一般的编程实践中,通常来说,eq(false, ...)的语义并不是一种常见或标准的用法。原因如下:

  1. 通常情况下,eq 方法用于表示相等比较,而将其设置为 false 可能会引起歧义,因为大多数情况下并没有明确定义的方式来表示“不相等”。
  2. 不同的编程语言、库或框架对于 eq(false, ...) 的行为可能会有不同的解释和处理方式,这可能导致不同的结果,缺乏一致性和预测性。
  3. 在一些实现中,eq(false, ...)可能被简单地忽略,或者被解释成不起作用,因为它并不是常见的或标准的用法。
    因此,为了编写清晰、可维护的代码,最好避免使用不明确或不常见的语法,而是选择明确且常见的方式来表达逻辑条件,比如使用 ne(...) 来表示不相等比较。
posted @ 2023-12-26 10:49  Journey&Flower  阅读(1385)  评论(0编辑  收藏  举报