diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java index b74ee7a9..622e9e00 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryMethods.java @@ -807,85 +807,44 @@ public class QueryMethods { /** * 返回字符串 s 的前 n 个字符。 */ - public static QueryColumn left(String columnS, String columnN) { - return new FunctionQueryColumn(LEFT, columnS, columnN); + public static QueryColumn left(String columnS, int length) { + return new FunctionQueryColumn(LEFT, string(columnS), number(length)); } /** * 返回字符串 s 的前 n 个字符。 */ - public static QueryColumn left(QueryColumn columnS, QueryColumn columnN) { - return new FunctionQueryColumn(LEFT, columnS, columnN); + public static QueryColumn left(QueryColumn columnS, int length) { + return new FunctionQueryColumn(LEFT, columnS, number(length)); } /** * 返回字符串 s 的前 n 个字符。 */ - public static QueryColumn left(LambdaGetter columnS, LambdaGetter columnN) { - return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN)); + public static QueryColumn left(LambdaGetter columnS, int length) { + return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnS), number(length)); + } + + + /** + * 返回字符串 s 的后 length 个字符。 + */ + public static QueryColumn right(String columnS, int length) { + return new FunctionQueryColumn(RIGHT, string(columnS), number(length)); } /** - * 返回字符串 s 的前 n 个字符。 + * 返回字符串 s 的后 length 个字符。 */ - public static QueryColumn left(String columnX, Integer n) { - return new FunctionQueryColumn(LEFT, new QueryColumn(columnX), number(n)); + public static QueryColumn right(QueryColumn columnS, int length) { + return new FunctionQueryColumn(RIGHT, columnS, number(length)); } /** - * 返回字符串 s 的前 n 个字符。 + * 返回字符串 s 的后 length 个字符。 */ - public static QueryColumn left(QueryColumn columnX, Integer n) { - return new FunctionQueryColumn(LEFT, columnX, number(n)); - } - - /** - * 返回字符串 s 的前 n 个字符。 - */ - public static QueryColumn left(LambdaGetter columnX, Integer n) { - return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnX), number(n)); - } - - /** - * 返回字符串 s 的后 n 个字符。 - */ - public static QueryColumn right(String columnS, String columnN) { - return new FunctionQueryColumn(RIGHT, columnS, columnN); - } - - /** - * 返回字符串 s 的后 n 个字符。 - */ - public static QueryColumn right(QueryColumn columnS, QueryColumn columnN) { - return new FunctionQueryColumn(RIGHT, columnS, columnN); - } - - /** - * 返回字符串 s 的后 n 个字符。 - */ - public static QueryColumn right(LambdaGetter columnS, LambdaGetter columnN) { - return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN)); - } - - /** - * 返回字符串 s 的后 n 个字符。 - */ - public static QueryColumn right(String columnX, Integer n) { - return new FunctionQueryColumn(RIGHT, new QueryColumn(columnX), number(n)); - } - - /** - * 返回字符串 s 的后 n 个字符。 - */ - public static QueryColumn right(QueryColumn columnX, Integer n) { - return new FunctionQueryColumn(RIGHT, columnX, number(n)); - } - - /** - * 返回字符串 s 的后 n 个字符。 - */ - public static QueryColumn right(LambdaGetter columnX, Integer n) { - return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnX), number(n)); + public static QueryColumn right(LambdaGetter columnS, int length) { + return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnS), number(length)); } /** @@ -1084,25 +1043,47 @@ public class QueryMethods { return new FunctionQueryColumn(STRCMP, LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnS2)); } + /** - * 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串。 + * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 */ - public static QueryColumn substring(String columnS, String columnN, String columnLen) { - return new FunctionQueryColumn(SUBSTRING, columnS, columnN, columnLen); + public static QueryColumn substring(String columnS, int position) { + return new FunctionQueryColumn(SUBSTRING, string(columnS), number(position)); } /** - * 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串。 + * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 */ - public static QueryColumn substring(QueryColumn columnS, QueryColumn columnN, QueryColumn columnLen) { - return new FunctionQueryColumn(SUBSTRING, columnS, columnN, columnLen); + public static QueryColumn substring(QueryColumn columnS, int position) { + return new FunctionQueryColumn(SUBSTRING, columnS, number(position)); } /** - * 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串。 + * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 */ - public static QueryColumn substring(LambdaGetter columnS, LambdaGetter columnN, LambdaGetter columnLen) { - return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN), LambdaUtil.getQueryColumn(columnLen)); + public static QueryColumn substring(LambdaGetter columnS, int position) { + return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), number(position)); + } + + /** + * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 + */ + public static QueryColumn substring(String columnS, int position, int length) { + return new FunctionQueryColumn(SUBSTRING, string(columnS), number(position), number(length)); + } + + /** + * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 + */ + public static QueryColumn substring(QueryColumn columnS, int position, int length) { + return new FunctionQueryColumn(SUBSTRING, columnS, number(position), number(length)); + } + + /** + * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 + */ + public static QueryColumn substring(LambdaGetter columnS, int position, int length) { + return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), number(position), number(length)); } /** @@ -2326,7 +2307,7 @@ public class QueryMethods { * 返回指定列的总行数。 */ public static FunctionQueryColumn count() { - return new FunctionQueryColumn(COUNT, new StringQueryColumn("*")); + return new FunctionQueryColumn(COUNT, new RawQueryColumn("*")); } /** @@ -2391,42 +2372,42 @@ public class QueryMethods { * 构建 TRUE 常量。 */ public static QueryColumn true_() { - return new StringQueryColumn("TRUE"); + return new RawQueryColumn("TRUE"); } /** * 构建 FALSE 常量。 */ public static QueryColumn false_() { - return new StringQueryColumn("FALSE"); + return new RawQueryColumn("FALSE"); } /** * 构建 NULL 常量。 */ public static QueryColumn null_() { - return new StringQueryColumn("NULL"); + return new RawQueryColumn("NULL"); } /** * 构建数字常量。 */ public static QueryColumn number(Number n) { - return new StringQueryColumn(n.toString()); + return new RawQueryColumn(n); } /** * 构建数字常量。 */ public static QueryColumn string(String s) { - return new StringQueryColumn("'" + s + "'"); + return new RawQueryColumn("'" + s + "'"); } /** * 构建自定义列。 */ public static QueryColumn column(String column) { - return new StringQueryColumn(column); + return new RawQueryColumn(column); } /** diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java index 2f40a6fc..1718a64e 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryWrapper.java @@ -82,7 +82,7 @@ public class QueryWrapper extends BaseQueryWrapper { public QueryWrapper select(String... columns) { for (String column : columns) { - addSelectColumn(new StringQueryColumn(column)); + addSelectColumn(new RawQueryColumn(column)); } return this; } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/StringQueryColumn.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/RawQueryColumn.java similarity index 82% rename from mybatis-flex-core/src/main/java/com/mybatisflex/core/query/StringQueryColumn.java rename to mybatis-flex-core/src/main/java/com/mybatisflex/core/query/RawQueryColumn.java index d495989c..d62a2367 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/StringQueryColumn.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/RawQueryColumn.java @@ -23,13 +23,13 @@ import java.util.List; /** * 自定义字符串列,用于扩展 */ -public class StringQueryColumn extends QueryColumn { +public class RawQueryColumn extends QueryColumn { protected String content; - public StringQueryColumn(String content) { - this.content = content; + public RawQueryColumn(Object content) { + this.content = String.valueOf(content); } @Override @@ -44,14 +44,14 @@ public class StringQueryColumn extends QueryColumn { @Override public String toString() { - return "StringQueryColumn{" + + return "RawQueryColumn{" + "content='" + content + '\'' + '}'; } @Override - public StringQueryColumn clone() { - return (StringQueryColumn) super.clone(); + public RawQueryColumn clone() { + return (RawQueryColumn) super.clone(); } } diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/FunctionSqlTest.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/FunctionSqlTest.java index 3e0c1e46..f026ea03 100644 --- a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/FunctionSqlTest.java +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/FunctionSqlTest.java @@ -18,7 +18,7 @@ package com.mybatisflex.coretest; import com.mybatisflex.core.query.FunctionQueryColumn; import com.mybatisflex.core.query.QueryWrapper; -import com.mybatisflex.core.query.StringQueryColumn; +import com.mybatisflex.core.query.RawQueryColumn; import org.junit.Test; import static com.mybatisflex.core.query.QueryMethods.*; @@ -34,7 +34,7 @@ public class FunctionSqlTest { public void test() { String sql = QueryWrapper.create() .select(new FunctionQueryColumn("NOW").as("n1")) - .select(new FunctionQueryColumn("NOW", new StringQueryColumn("")).as("n2")) + .select(new FunctionQueryColumn("NOW", new RawQueryColumn("")).as("n2")) .select(new FunctionQueryColumn("CONCAT", ACCOUNT.USER_NAME, ACCOUNT.AGE).as("c1")) .from(ACCOUNT) .toSQL();