From 0b1f044ea22775f7cfcf7d0638c64f08341cb520 Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Wed, 13 Aug 2025 11:46:17 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E5=88=A9=E7=94=A8jsqlpa?= =?UTF-8?q?rser=E6=96=B0=E5=A2=9E=E4=B8=80=E4=B8=AA=E6=96=B9=E4=BE=BF?= =?UTF-8?q?=E6=8B=BC=E8=A3=85sql=E7=9A=84=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1469817729548288]利用jsqlparser新增一个方便拼装sql的工具类 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1469817729548288 --- .../java/neatlogic/framework/sqlgenerator/$sql.java | 12 +++++++++++- .../neatlogic/framework/sqlgenerator/$sqlTest.java | 5 +++++ .../framework/sqlgenerator/ExpressionVo.java | 12 ++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/neatlogic/framework/sqlgenerator/$sql.java b/src/main/java/neatlogic/framework/sqlgenerator/$sql.java index e96aecf7a..af25ce7cd 100644 --- a/src/main/java/neatlogic/framework/sqlgenerator/$sql.java +++ b/src/main/java/neatlogic/framework/sqlgenerator/$sql.java @@ -111,6 +111,10 @@ public class $sql { return new ExpressionVo(leftColumn, operationSymbol, rightValueExpression); } + public static ExpressionVo exp(String leftColumn, String operationSymbol, FunctionVo rightFunction) { + return new ExpressionVo(leftColumn, operationSymbol, rightFunction); + } + public static ExpressionVo exp(String leftColumn, String operationSymbol) { return new ExpressionVo(leftColumn, operationSymbol, new ValueVo("")); } @@ -221,6 +225,7 @@ public class $sql { if (CollectionUtils.isNotEmpty(sqlVo.getWhereExpressionList())) { whereExpressionList.addAll(sqlVo.getWhereExpressionList()); } + List joinAliasList = new ArrayList<>(); List joinList = sqlVo.getJoinList(); for (JoinVo joinVo : joinList) { if (CollectionUtils.isNotEmpty(joinVo.getGroupByList())) { @@ -235,7 +240,10 @@ public class $sql { if (CollectionUtils.isNotEmpty(joinVo.getWhereExpressionList())) { whereExpressionList.addAll(joinVo.getWhereExpressionList()); } - addJoin(plainSelect, joinVo); + if (!joinAliasList.contains(joinVo.getAlias())) { + addJoin(plainSelect, joinVo); + joinAliasList.add(joinVo.getAlias()); + } } if (CollectionUtils.isNotEmpty(selectColumnList)) { for (ColumnVo selectColumn : selectColumnList) { @@ -662,6 +670,8 @@ public class $sql { } else if (rightObj instanceof ExpressionList) { rightExpressionList = (ExpressionList) rightObj; } + } else if (expressionVo.getRightFunctionVo() != null) { + rightExpression = parseFunction(expressionVo.getRightFunctionVo()); } if (Objects.equals(operationSymbol, "=")) { resultExpression = new EqualsTo(leftExpression, rightExpression); diff --git a/src/main/java/neatlogic/framework/sqlgenerator/$sqlTest.java b/src/main/java/neatlogic/framework/sqlgenerator/$sqlTest.java index f2abd2fa4..3088073f2 100644 --- a/src/main/java/neatlogic/framework/sqlgenerator/$sqlTest.java +++ b/src/main/java/neatlogic/framework/sqlgenerator/$sqlTest.java @@ -526,6 +526,11 @@ public class $sqlTest { $sql.addWhereExpression(plainSelect, $sql.exp("is_active", "in", "(0, 1)")); Assert.isTrue(Objects.equals(plainSelect.toString(), "SELECT FROM tenant WHERE is_active IN (0, 1)"), "测试失败"); methodNameList.remove("public static ExpressionVo exp(String, String, String)"); +// public static ExpressionVo exp(String, String, FunctionVo) + plainSelect = $sql.from("tenant"); + $sql.addWhereExpression(plainSelect, $sql.exp("visit_time", ">=", $sql.fun("STR_TO_DATE", "'2023-11-08 09:57:01'", "'%Y-%m-%d %H:%i:%s'"))); + Assert.isTrue(Objects.equals(plainSelect.toString(), "SELECT FROM tenant WHERE visit_time >= STR_TO_DATE('2023-11-08 09:57:01', '%Y-%m-%d %H:%i:%s')"), "测试失败"); + methodNameList.remove("public static ExpressionVo exp(String, String, FunctionVo)"); // public static ExpressionVo exp(String, String, Integer) plainSelect = $sql.from("tenant"); $sql.addWhereExpression(plainSelect, $sql.exp("is_active", "=", 0)); diff --git a/src/main/java/neatlogic/framework/sqlgenerator/ExpressionVo.java b/src/main/java/neatlogic/framework/sqlgenerator/ExpressionVo.java index 65b063131..efa99dbf9 100644 --- a/src/main/java/neatlogic/framework/sqlgenerator/ExpressionVo.java +++ b/src/main/java/neatlogic/framework/sqlgenerator/ExpressionVo.java @@ -29,6 +29,7 @@ public class ExpressionVo { private String rightColumn; private ValueVo leftValueExpression; private ValueVo rightValueExpression; + private FunctionVo rightFunctionVo; private ExpressionVo leftExpressionVo; private ExpressionVo rightExpressionVo; private final String operationSymbol; @@ -62,6 +63,13 @@ public class ExpressionVo { this(leftColumn, operationSymbol, new ValueVo("")); } + ExpressionVo(String leftColumn, String operationSymbol, FunctionVo rightFunctionVo) { + this.leftColumn = leftColumn; + this.operationSymbol = operationSymbol; + this.rightFunctionVo = rightFunctionVo; + this.type = $sql.COMPARATIVE_OPERATION; + } + ExpressionVo(String leftColumn, String operationSymbol, ValueVo rightValueExpression) { this.leftColumn = leftColumn; this.operationSymbol = operationSymbol; @@ -108,6 +116,10 @@ public class ExpressionVo { return rightValueExpression; } + public FunctionVo getRightFunctionVo() { + return rightFunctionVo; + } + public String getOperationSymbol() { return operationSymbol; } -- Gitee