From 41623638137a3d12e75e8beeb57ca9ab3593e1f9 Mon Sep 17 00:00:00 2001 From: Muyangmin Date: Fri, 5 Apr 2024 23:15:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20eqSql=20=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E3=80=82=20(#6029)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Muyangmin --- .../core/conditions/AbstractWrapper.java | 6 +++++ .../core/conditions/interfaces/Func.java | 27 +++++++++++++++++++ .../core/conditions/QueryWrapperTest.java | 3 ++- .../conditions/AbstractChainWrapper.java | 6 +++++ 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java b/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java index 27a7801085..acbeb18aa1 100755 --- a/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java +++ b/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java @@ -309,6 +309,12 @@ public Children notIn(boolean condition, R column, Object... values) { return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(column), NOT_IN, inExpression(values))); } + @Override + public Children eqSql(boolean condition, R column, String eqValue) { + return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(column), EQ, + () -> String.format("(%s)", eqValue))); + } + @Override public Children inSql(boolean condition, R column, String inValue) { return maybeDo(condition, () -> appendSqlSegments(columnToSqlSegment(column), IN, diff --git a/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Func.java b/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Func.java index 057fdaca1b..5c274ecf40 100644 --- a/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Func.java +++ b/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/interfaces/Func.java @@ -189,6 +189,33 @@ default Children notIn(R column, Object... values) { */ Children notIn(boolean condition, R column, Object... values); + /** + * 字段 EQ ( sql语句 ) + *

!! sql 注入方式的 eq 方法 !!

+ *

例1: eqSql("id", "1")

+ *

例2: eqSql("id", "select MAX(id) from table")

+ * + * @param column 字段 + * @param sql sql语句 + * @return children + */ + default Children eqSql(R column, String sql) { + return eqSql(true, column, sql); + } + + /** + * 字段 EQ ( sql语句 ) + *

!! sql 注入方式的 eq 方法 !!

+ *

例1: eqSql("id", "1")

+ *

例2: eqSql("id", "select MAX(id) from table")

+ * + * @param condition 执行条件 + * @param column 字段 + * @param sql sql语句 + * @return children + */ + Children eqSql(boolean condition, R column, String sql); + /** * 字段 IN ( sql语句 ) *

!! sql 注入方式的 in 方法 !!

diff --git a/mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/QueryWrapperTest.java b/mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/QueryWrapperTest.java index 638781175a..28e2dad509 100644 --- a/mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/QueryWrapperTest.java +++ b/mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/QueryWrapperTest.java @@ -107,12 +107,13 @@ void testFunc() { .groupBy("id").groupBy("name", "id2", "name2") .in("inColl", getList()).or().notIn("notInColl", getList()) .in("inArray").notIn("notInArray", 5, 6, 7) + .eqSql("eqSql", "1") .inSql("inSql", "1,2,3,4,5").notInSql("inSql", "1,2,3,4,5") .gtSql("gtSql", "1,2,3,4,5").ltSql("ltSql", "1,2,3,4,5") .geSql("geSql", "1,2,3,4,5").leSql("leSql", "1,2,3,4,5") .having("sum(age) > {0}", 1).having("id is not null") .func(entity.getId() != null, j -> j.eq("id", entity.getId()));// 不会npe,也不会加入sql - logSqlWhere("测试 Func 下的方法", queryWrapper, "(nullColumn IS NULL OR notNullColumn IS NOT NULL AND inColl IN (?,?) OR notInColl NOT IN (?,?) AND inArray IN () AND notInArray NOT IN (?,?,?) AND inSql IN (1,2,3,4,5) AND inSql NOT IN (1,2,3,4,5) AND gtSql > (1,2,3,4,5) AND ltSql < (1,2,3,4,5) AND geSql >= (1,2,3,4,5) AND leSql <= (1,2,3,4,5)) GROUP BY id,name,id2,name2 HAVING sum(age) > ? AND id is not null ORDER BY id ASC,name DESC,name2 DESC"); + logSqlWhere("测试 Func 下的方法", queryWrapper, "(nullColumn IS NULL OR notNullColumn IS NOT NULL AND inColl IN (?,?) OR notInColl NOT IN (?,?) AND inArray IN () AND notInArray NOT IN (?,?,?) AND eqSql = (1) AND inSql IN (1,2,3,4,5) AND inSql NOT IN (1,2,3,4,5) AND gtSql > (1,2,3,4,5) AND ltSql < (1,2,3,4,5) AND geSql >= (1,2,3,4,5) AND leSql <= (1,2,3,4,5)) GROUP BY id,name,id2,name2 HAVING sum(age) > ? AND id is not null ORDER BY id ASC,name DESC,name2 DESC"); logParams(queryWrapper); } diff --git a/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/AbstractChainWrapper.java b/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/AbstractChainWrapper.java index 76cb1752d8..64827f2d50 100644 --- a/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/AbstractChainWrapper.java +++ b/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/AbstractChainWrapper.java @@ -201,6 +201,12 @@ public Children notIn(boolean condition, R column, Object... values) { return typedThis; } + @Override + public Children eqSql(boolean condition, R column, String eqValue) { + getWrapper().eqSql(condition, column, eqValue); + return typedThis; + } + @Override public Children inSql(boolean condition, R column, String inValue) { getWrapper().inSql(condition, column, inValue);