From 36d905e6fa3f3cd1b51b7a6635887b7e5f185981 Mon Sep 17 00:00:00 2001 From: RedKale <22250530@qq.com> Date: Tue, 15 Mar 2016 10:29:05 +0800 Subject: [PATCH] --- .../org/redkale/source/FilterExpress.java | 3 +- .../java/org/redkale/source/FilterNode.java | 71 ++++++++++++++----- 2 files changed, 55 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/redkale/source/FilterExpress.java b/src/main/java/org/redkale/source/FilterExpress.java index 28cf8714d..a148086fd 100644 --- a/src/main/java/org/redkale/source/FilterExpress.java +++ b/src/main/java/org/redkale/source/FilterExpress.java @@ -20,7 +20,6 @@ public enum FilterExpress { LESSTHAN("<"), GREATERTHANOREQUALTO(">="), LESSTHANOREQUALTO("<="), - LIKE("LIKE"), NOTLIKE("NOT LIKE"), IGNORECASELIKE("LIKE"), //不区分大小写的 LIKE @@ -40,6 +39,8 @@ public enum FilterExpress { OPAND("&"), //与运算 > 0 OPOR("|"), //或运算 > 0 OPANDNO("&"), //与运算 == 0 + MOD("%"), //取模运算 > 0 + MODNO("%"), //取模运算 == 0 AND("AND"), OR("OR"); diff --git a/src/main/java/org/redkale/source/FilterNode.java b/src/main/java/org/redkale/source/FilterNode.java index 86643f7a3..0012fd4f6 100644 --- a/src/main/java/org/redkale/source/FilterNode.java +++ b/src/main/java/org/redkale/source/FilterNode.java @@ -5,17 +5,15 @@ */ package org.redkale.source; -import static org.redkale.source.FilterExpress.*; import java.io.*; import java.lang.reflect.*; import java.util.*; import java.util.function.*; +import static org.redkale.source.FilterExpress.*; import org.redkale.util.*; /** - * 注意: - * 在调用 createSQLExpress 之前必须先调用 createSQLJoin - * 在调用 createPredicate 之前必须先调用 isCacheUseable + * 注意: 在调用 createSQLExpress 之前必须先调用 createSQLJoin 在调用 createPredicate 之前必须先调用 isCacheUseable * *

* 详情见: http://www.redkale.org @@ -114,10 +112,10 @@ public class FilterNode { /** * 该方法需要重载 * - * @param Entity类的泛型 - * @param func EntityInfo的加载器 + * @param Entity类的泛型 + * @param func EntityInfo的加载器 * @param joinTabalis 关联表集合 - * @param info Entity类的EntityInfo + * @param info Entity类的EntityInfo * @return SQL的join语句 不存在返回null */ protected CharSequence createSQLJoin(final Function func, final Map joinTabalis, final EntityInfo info) { @@ -176,9 +174,9 @@ public class FilterNode { /** * 该方法需要重载 * - * @param Entity类的泛型 + * @param Entity类的泛型 * @param joinTabalis 关联表的集合 - * @param info EntityInfo + * @param info EntityInfo * @return JOIN的SQL语句 */ protected CharSequence createSQLExpress(final EntityInfo info, final Map joinTabalis) { @@ -234,8 +232,10 @@ public class FilterNode { switch (express) { case OPAND: case OPOR: + case MOD: sb.append(express.value()).append(' ').append(val).append(" > 0"); break; + case MODNO: case OPANDNO: sb.append(express.value()).append(' ').append(val).append(" = 0"); break; @@ -433,7 +433,8 @@ public class FilterNode { } final Serializable val = val0; switch (express) { - case EQUAL: return new Predicate() { + case EQUAL: + return new Predicate() { @Override public boolean test(T t) { @@ -445,7 +446,8 @@ public class FilterNode { return field + ' ' + express.value() + ' ' + formatToString(val); } }; - case NOTEQUAL: return new Predicate() { + case NOTEQUAL: + return new Predicate() { @Override public boolean test(T t) { @@ -457,7 +459,8 @@ public class FilterNode { return field + ' ' + express.value() + ' ' + formatToString(val); } }; - case GREATERTHAN: return new Predicate() { + case GREATERTHAN: + return new Predicate() { @Override public boolean test(T t) { @@ -469,7 +472,8 @@ public class FilterNode { return field + ' ' + express.value() + ' ' + val; } }; - case LESSTHAN: return new Predicate() { + case LESSTHAN: + return new Predicate() { @Override public boolean test(T t) { @@ -481,7 +485,8 @@ public class FilterNode { return field + ' ' + express.value() + ' ' + val; } }; - case GREATERTHANOREQUALTO: return new Predicate() { + case GREATERTHANOREQUALTO: + return new Predicate() { @Override public boolean test(T t) { @@ -493,7 +498,8 @@ public class FilterNode { return field + ' ' + express.value() + ' ' + val; } }; - case LESSTHANOREQUALTO: return new Predicate() { + case LESSTHANOREQUALTO: + return new Predicate() { @Override public boolean test(T t) { @@ -506,7 +512,8 @@ public class FilterNode { } }; - case OPAND: return new Predicate() { + case OPAND: + return new Predicate() { @Override public boolean test(T t) { @@ -518,7 +525,21 @@ public class FilterNode { return field + " & " + val + " > 0"; } }; - case OPOR: return new Predicate() { + case MOD: + return new Predicate() { + + @Override + public boolean test(T t) { + return (((Number) attr.get(t)).longValue() % ((Number) val).longValue()) > 0; + } + + @Override + public String toString() { + return field + " & " + val + " > 0"; + } + }; + case OPOR: + return new Predicate() { @Override public boolean test(T t) { @@ -530,13 +551,27 @@ public class FilterNode { return field + " | " + val + " > 0"; } }; - case OPANDNO: return new Predicate() { + case OPANDNO: + return new Predicate() { @Override public boolean test(T t) { return (((Number) attr.get(t)).longValue() & ((Number) val).longValue()) == 0; } + @Override + public String toString() { + return field + " & " + val + " = 0"; + } + }; + case MODNO: + return new Predicate() { + + @Override + public boolean test(T t) { + return (((Number) attr.get(t)).longValue() % ((Number) val).longValue()) == 0; + } + @Override public String toString() { return field + " & " + val + " = 0";