This commit is contained in:
@@ -20,6 +20,12 @@ public enum FilterExpress {
|
||||
LESSTHAN("<"),
|
||||
GREATERTHANOREQUALTO(">="),
|
||||
LESSTHANOREQUALTO("<="),
|
||||
|
||||
STARTSWITH("LIKE"),
|
||||
NOTSTARTSWITH("NOT LIKE"),
|
||||
ENDSWITH("LIKE"),
|
||||
NOTENDSWITH("NOT LIKE"),
|
||||
|
||||
LIKE("LIKE"),
|
||||
NOTLIKE("NOT LIKE"),
|
||||
IGNORECASELIKE("LIKE"), //不区分大小写的 LIKE
|
||||
|
||||
@@ -5,16 +5,16 @@
|
||||
*/
|
||||
package org.redkale.source;
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.reflect.*;
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.*;
|
||||
import java.util.function.*;
|
||||
import static org.redkale.source.FilterExpress.*;
|
||||
import org.redkale.util.*;
|
||||
import org.redkale.util.Attribute;
|
||||
|
||||
/**
|
||||
* 注意: 在调用 createSQLExpress 之前必须先调用 createSQLJoin 在调用 createPredicate 之前必须先调用 isCacheUseable
|
||||
*
|
||||
* <p>
|
||||
* <p>
|
||||
* 详情见: http://www.redkale.org
|
||||
*
|
||||
@@ -738,6 +738,34 @@ public class FilterNode {
|
||||
return field + ' ' + express.value() + ' ' + formatToString(val);
|
||||
}
|
||||
};
|
||||
case STARTSWITH:
|
||||
return new Predicate<T>() {
|
||||
|
||||
@Override
|
||||
public boolean test(T t) {
|
||||
Object rs = attr.get(t);
|
||||
return rs != null && rs.toString().startsWith(val.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return field + " STARTSWITH " + formatToString(val);
|
||||
}
|
||||
};
|
||||
case ENDSWITH:
|
||||
return new Predicate<T>() {
|
||||
|
||||
@Override
|
||||
public boolean test(T t) {
|
||||
Object rs = attr.get(t);
|
||||
return rs != null && rs.toString().endsWith(val.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return field + " ENDSWITH " + formatToString(val);
|
||||
}
|
||||
};
|
||||
case IGNORECASELIKE:
|
||||
final String valstr = val.toString().toLowerCase();
|
||||
return new Predicate<T>() {
|
||||
@@ -753,18 +781,32 @@ public class FilterNode {
|
||||
return "LOWER(" + field + ") " + express.value() + ' ' + formatToString(valstr);
|
||||
}
|
||||
};
|
||||
case NOTLIKE:
|
||||
case NOTSTARTSWITH:
|
||||
return new Predicate<T>() {
|
||||
|
||||
@Override
|
||||
public boolean test(T t) {
|
||||
Object rs = attr.get(t);
|
||||
return rs == null || !rs.toString().contains(val.toString());
|
||||
return rs == null || !rs.toString().startsWith(val.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return field + ' ' + express.value() + ' ' + formatToString(val);
|
||||
return field + " NOT STARTSWITH " + formatToString(val);
|
||||
}
|
||||
};
|
||||
case NOTENDSWITH:
|
||||
return new Predicate<T>() {
|
||||
|
||||
@Override
|
||||
public boolean test(T t) {
|
||||
Object rs = attr.get(t);
|
||||
return rs == null || !rs.toString().endsWith(val.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return field + " NOT ENDSWITH " + formatToString(val);
|
||||
}
|
||||
};
|
||||
case IGNORECASENOTLIKE:
|
||||
@@ -1108,6 +1150,10 @@ public class FilterNode {
|
||||
if (value instanceof CharSequence) {
|
||||
if (express == LIKE || express == NOTLIKE) {
|
||||
value = "%" + value + '%';
|
||||
} else if (express == STARTSWITH || express == NOTSTARTSWITH) {
|
||||
value = value + "%";
|
||||
} else if (express == ENDSWITH || express == NOTENDSWITH) {
|
||||
value = "%" + value;
|
||||
} else if (express == IGNORECASELIKE || express == IGNORECASENOTLIKE) {
|
||||
value = "%" + value.toString().toLowerCase() + '%';
|
||||
} else if (express == IGNORECASECONTAIN || express == IGNORECASENOTCONTAIN) {
|
||||
|
||||
Reference in New Issue
Block a user