代码之家  ›  专栏  ›  技术社区  ›  Jonathan S. Fisher

Mybatis,随附或使用SQL builder

  •  0
  • Jonathan S. Fisher  · 技术社区  · 6 年前

    我不知道如何让MyBatis生成附带的or语句:

    WHERE x.token = ? AND (
      (x.scene = 'A' OR x.scene = 'B'))
    

    这是一个令人惊讶的简单操作,他们使其变得非常困难。我在JavaDoc中找不到它: http://static.javadoc.io/org.mybatis/mybatis/3.4.5/org/apache/ibatis/jdbc/SQL.html

    1 回复  |  直到 6 年前
        1
  •  2
  •   Roman-Stop RU aggression in UA    6 年前

    在当前版本的mybatis(3.4.6)中无法完成此操作。

    您可以这样使用整个子表达式:

    WHERE("x.token = ?");
    WHERE("(x.scene = 'A' OR x.scene = 'B')");
    

    或者,如果要创建的操作数很多/可变,则创建自己的函数 OR :

    WHERE("x.token = ?");
    WHERE(OR("x.scene = 'A'", "x.scene = 'B'"));
    

    哪里 定义(使用 guava Joiner )作为:

    Joiner OR_JOINER = Joiner.on(" OR ");
    
    private String OR(String ... operands) {
        return String.format("(%s)", OR_JOINER.join(operands));
    }