|
@@ -117,29 +117,6 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
|
|
return typedThis;
|
|
return typedThis;
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * TODO 待确定的多参数字段过滤
|
|
|
|
- * 条件过滤器,该方法是一个 NullSafe 的方法
|
|
|
|
- * 参数中的 null 值在拼接的时候会被自动转换成 IS NULL
|
|
|
|
- * 示例:
|
|
|
|
- * Map<String, String> params = new HashMap<String, String>(){{
|
|
|
|
- * put("id", "123");
|
|
|
|
- * put("name", "baomidou");
|
|
|
|
- * put("address", null);
|
|
|
|
- * }};
|
|
|
|
- * <p>
|
|
|
|
- * 去除值为null的元素,可以这么写:
|
|
|
|
- * allEq((key,value)-> null!= value, params);
|
|
|
|
- * 只加入id ,name:
|
|
|
|
- * allEq((key,value)-> "id".equals(key) || "name".equals(key), params);
|
|
|
|
- * 根据无关的条件判断:
|
|
|
|
- * allEq((key,value)-> IntStream.rangeClosed(1,10).limit(1).findFirst().getAsInt() > 5, params);
|
|
|
|
- *
|
|
|
|
- * @param filter 返回 true 来允许字段传入 条件中
|
|
|
|
- * @param params 参数
|
|
|
|
- * @param <V> 参数中值的类型
|
|
|
|
- * @return 返回自身
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public <V> This allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params) {
|
|
public <V> This allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params) {
|
|
if (condition && CollectionUtils.isNotEmpty(params)) {
|
|
if (condition && CollectionUtils.isNotEmpty(params)) {
|
|
@@ -156,166 +133,102 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
|
|
return typedThis;
|
|
return typedThis;
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 等于 =
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This eq(boolean condition, R column, Object val) {
|
|
public This eq(boolean condition, R column, Object val) {
|
|
return addCondition(condition, column, EQ, val);
|
|
return addCondition(condition, column, EQ, val);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 不等于 <>
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This ne(boolean condition, R column, Object val) {
|
|
public This ne(boolean condition, R column, Object val) {
|
|
return addCondition(condition, column, NE, val);
|
|
return addCondition(condition, column, NE, val);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 大于 >
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This gt(boolean condition, R column, Object val) {
|
|
public This gt(boolean condition, R column, Object val) {
|
|
return addCondition(condition, column, GT, val);
|
|
return addCondition(condition, column, GT, val);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 大于等于 >=
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This ge(boolean condition, R column, Object val) {
|
|
public This ge(boolean condition, R column, Object val) {
|
|
return addCondition(condition, column, GE, val);
|
|
return addCondition(condition, column, GE, val);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 小于 <
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This lt(boolean condition, R column, Object val) {
|
|
public This lt(boolean condition, R column, Object val) {
|
|
return addCondition(condition, column, LT, val);
|
|
return addCondition(condition, column, LT, val);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 小于等于 <=
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This le(boolean condition, R column, Object val) {
|
|
public This le(boolean condition, R column, Object val) {
|
|
return addCondition(condition, column, LE, val);
|
|
return addCondition(condition, column, LE, val);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * LIKE '%值%'
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This like(boolean condition, R column, Object val) {
|
|
public This like(boolean condition, R column, Object val) {
|
|
return doIt(condition, () -> columnToString(column), LIKE, () -> formatSql("{0}", "%" + val + "%"));
|
|
return doIt(condition, () -> columnToString(column), LIKE, () -> formatSql("{0}", "%" + val + "%"));
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * NOT LIKE '%值%'
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This notLike(boolean condition, R column, Object val) {
|
|
public This notLike(boolean condition, R column, Object val) {
|
|
return not(condition).like(condition, column, val);
|
|
return not(condition).like(condition, column, val);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * LIKE '%值'
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This likeLeft(boolean condition, R column, Object val) {
|
|
public This likeLeft(boolean condition, R column, Object val) {
|
|
return doIt(condition, () -> columnToString(column), LIKE, () -> formatSql("{0}", "%" + val));
|
|
return doIt(condition, () -> columnToString(column), LIKE, () -> formatSql("{0}", "%" + val));
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * LIKE '值%'
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This likeRight(boolean condition, R column, Object val) {
|
|
public This likeRight(boolean condition, R column, Object val) {
|
|
return doIt(condition, () -> columnToString(column), LIKE, () -> formatSql("{0}", val + "%"));
|
|
return doIt(condition, () -> columnToString(column), LIKE, () -> formatSql("{0}", val + "%"));
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * BETWEEN 值1 AND 值2
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This between(boolean condition, R column, Object val1, Object val2) {
|
|
public This between(boolean condition, R column, Object val1, Object val2) {
|
|
return doIt(condition, () -> columnToString(column), BETWEEN, () -> formatSql("{0}", val1), AND,
|
|
return doIt(condition, () -> columnToString(column), BETWEEN, () -> formatSql("{0}", val1), AND,
|
|
() -> formatSql("{0}", val2));
|
|
() -> formatSql("{0}", val2));
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * NOT BETWEEN 值1 AND 值2
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This notBetween(boolean condition, R column, Object val1, Object val2) {
|
|
public This notBetween(boolean condition, R column, Object val1, Object val2) {
|
|
return not(condition).between(condition, column, val1, val2);
|
|
return not(condition).between(condition, column, val1, val2);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * AND 嵌套
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This and(boolean condition, Function<This, This> func) {
|
|
public This and(boolean condition, Function<This, This> func) {
|
|
return and(condition).addNestedCondition(condition, func);
|
|
return and(condition).addNestedCondition(condition, func);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * OR 嵌套
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This or(boolean condition, Function<This, This> func) {
|
|
public This or(boolean condition, Function<This, This> func) {
|
|
return or(condition).addNestedCondition(condition, func);
|
|
return or(condition).addNestedCondition(condition, func);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 正常嵌套 不带 AND 或者 OR
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This nested(boolean condition, Function<This, This> func) {
|
|
public This nested(boolean condition, Function<This, This> func) {
|
|
return addNestedCondition(condition, func);
|
|
return addNestedCondition(condition, func);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 拼接 OR
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This or(boolean condition) {
|
|
public This or(boolean condition) {
|
|
return doIt(condition, OR);
|
|
return doIt(condition, OR);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 拼接 IN ( sql 语句 )
|
|
|
|
- * 例: in("1,2,3,4,5,6")
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This in(boolean condition, String sql) {
|
|
public This in(boolean condition, String sql) {
|
|
return addNestedCondition(condition, sql, IN);
|
|
return addNestedCondition(condition, sql, IN);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 拼接 NOT IN ( sql 语句 )
|
|
|
|
- * 例: notIn("1,2,3,4,5,6")
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This notIn(boolean condition, String sql) {
|
|
public This notIn(boolean condition, String sql) {
|
|
return not(condition).in(condition, sql);
|
|
return not(condition).in(condition, sql);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 拼接 sql
|
|
|
|
- * 例: apply("date_format(column,'%Y-%m-%d') = '2008-08-08'")
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This apply(boolean condition, String applySql) {
|
|
public This apply(boolean condition, String applySql) {
|
|
return doIt(condition, () -> applySql);
|
|
return doIt(condition, () -> applySql);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 拼接 sql
|
|
|
|
- * 例: apply("date_format(column,'%Y-%m-%d') = {0}", LocalDate.now())
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This apply(boolean condition, String applySql, Object... value) {
|
|
public This apply(boolean condition, String applySql, Object... value) {
|
|
return doIt(condition, () -> formatSql(applySql, value));
|
|
return doIt(condition, () -> formatSql(applySql, value));
|
|
@@ -327,41 +240,26 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
|
|
return typedThis;
|
|
return typedThis;
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * EXISTS ( sql 语句 )
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This exists(boolean condition, String existsSql) {
|
|
public This exists(boolean condition, String existsSql) {
|
|
return addNestedCondition(condition, existsSql, EXISTS);
|
|
return addNestedCondition(condition, existsSql, EXISTS);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * NOT EXISTS ( sql 语句 )
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This notExists(boolean condition, String notExistsSql) {
|
|
public This notExists(boolean condition, String notExistsSql) {
|
|
return not(condition).exists(condition, notExistsSql);
|
|
return not(condition).exists(condition, notExistsSql);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 字段 IS NULL
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This isNull(boolean condition, R column) {
|
|
public This isNull(boolean condition, R column) {
|
|
return doIt(condition, () -> columnToString(column), IS_NULL);
|
|
return doIt(condition, () -> columnToString(column), IS_NULL);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 字段 IS NOT NULL
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This isNotNull(boolean condition, R column) {
|
|
public This isNotNull(boolean condition, R column) {
|
|
return doIt(condition, () -> columnToString(column), IS_NOT_NULL);
|
|
return doIt(condition, () -> columnToString(column), IS_NOT_NULL);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 字段 IN (value.get(0), value.get(1), ...)
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This in(boolean condition, R column, Collection<?> value) {
|
|
public This in(boolean condition, R column, Collection<?> value) {
|
|
if (CollectionUtils.isEmpty(value)) {
|
|
if (CollectionUtils.isEmpty(value)) {
|
|
@@ -370,9 +268,6 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
|
|
return doIt(condition, () -> columnToString(column), IN, inExpression(value));
|
|
return doIt(condition, () -> columnToString(column), IN, inExpression(value));
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * 字段 NOT IN (value.get(0), value.get(1), ...)
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This notIn(boolean condition, R column, Collection<?> value) {
|
|
public This notIn(boolean condition, R column, Collection<?> value) {
|
|
if (CollectionUtils.isEmpty(value)) {
|
|
if (CollectionUtils.isEmpty(value)) {
|
|
@@ -397,20 +292,6 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
|
|
return doIt(condition, ORDER_BY, () -> columnsToString(columns), isAsc ? ASC : DESC);
|
|
return doIt(condition, ORDER_BY, () -> columnsToString(columns), isAsc ? ASC : DESC);
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * <p>
|
|
|
|
- * 多字段转换为逗号 "," 分割字符串
|
|
|
|
- * </p>
|
|
|
|
- *
|
|
|
|
- * @param columns 多字段
|
|
|
|
- */
|
|
|
|
- protected String columnsToString(R... columns) {
|
|
|
|
- return Arrays.stream(columns).map(this::columnToString).collect(joining(","));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * HAVING ( sql 语句 )
|
|
|
|
- */
|
|
|
|
@Override
|
|
@Override
|
|
public This having(boolean condition, String sqlHaving, Object... params) {
|
|
public This having(boolean condition, String sqlHaving, Object... params) {
|
|
return doIt(condition, HAVING, () -> formatSqlIfNeed(condition, sqlHaving, params));
|
|
return doIt(condition, HAVING, () -> formatSqlIfNeed(condition, sqlHaving, params));
|
|
@@ -574,6 +455,17 @@ public abstract class AbstractWrapper<T, R, This extends AbstractWrapper<T, R, T
|
|
return paramNameValuePairs;
|
|
return paramNameValuePairs;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * <p>
|
|
|
|
+ * 多字段转换为逗号 "," 分割字符串
|
|
|
|
+ * </p>
|
|
|
|
+ *
|
|
|
|
+ * @param columns 多字段
|
|
|
|
+ */
|
|
|
|
+ protected String columnsToString(R... columns) {
|
|
|
|
+ return Arrays.stream(columns).map(this::columnToString).collect(joining(","));
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 获取 columnName
|
|
* 获取 columnName
|
|
*/
|
|
*/
|