目前看只支持这3种:
BooleanAnd("AND", 140), BooleanXor("XOR", 150), BooleanOr("OR", 160),
因项目需求,通过SQLBinaryOperator构建SQL时,需要构建出AND NOT,能否通过扩展支持BooleanNot("AND NOT", 140)呢? 如果可以,需要修改那些地方呢?
原提问者GitHub用户xgpxg
在 SQL 语法中,AND NOT 是一种逻辑操作符,表示取两个条件的交集,但排除符合第二个条件的结果。例如,如果需要查询既满足条件 A,又不满足条件 B 的记录,就可以使用 AND NOT 操作符。在 SQL 中,可以使用以下语法来执行 AND NOT 操作:
sql
Copy
SELECT * FROM table_name WHERE condition_A AND NOT condition_B;
在 Java 中,JDBC API 提供了 SQLBinaryOperator 接口来表示 SQL 中的二元操作符。虽然 SQLBinaryOperator 支持大部分SQL中的二元操作符,包括 AND 和 OR,但是并不支持 AND NOT 操作符。
a AND b (NOT c)
其中NOT是SQLUnaryOperator.NOT
原回答者GitHub用户wenshao
SQLBinaryOperator类定义了用于构建SQL表达式的二元运算符。它目前支持的逻辑操作符有AND、OR和XOR,但不支持AND NOT操作符。
要添加对AND NOT操作符的支持,您需要进行以下修改:
public enum SQLBinaryOperator {
BooleanAnd("AND", 140),
BooleanXor("XOR", 150),
BooleanOr("OR", 160),
BooleanNot("AND NOT", 140);
private final String name;
private final int priority;
SQLBinaryOperator(String name, int priority) {
this.name = name;
this.priority = priority;
}
public String getName() {
return name;
}
public int getPriority() {
return priority;
}
}
根据您的需求,将BooleanNot操作符的优先级设置为与BooleanAnd相同的140。这样可以确保AND NOT操作符的优先级正确。
在使用到SQLBinaryOperator的地方,比如构建SQL表达式的代码中,将需要使用AND NOT操作符的地方替换为BooleanNot。
经过以上修改,您应该能够使用SQLBinaryOperator来构建具有AND NOT逻辑操作的SQL表达式。请注意,这只是一种扩展SQLBinaryOperator类的方式,具体实现可能会因项目结构和需求而有所不同。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。