From addb2b671dbb89b9235ddb58dd19ba28055cf18a Mon Sep 17 00:00:00 2001
From: root <13910913995@163.com>
Date: Sat, 4 Apr 2026 10:56:57 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86sql=E8=A7=A3?=
=?UTF-8?q?=E6=9E=90=E5=99=A8=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.vscode/settings.json | 5 +
.../yfd/platform/common/DynamicSQLMapper.java | 262 ++++++++
.../yfd/platform/utils/QueryWrapperUtil.java | 634 ++++++++++++++++++
.../platform/utils/QueryWrapperUtilTest.java | 120 ++++
4 files changed, 1021 insertions(+)
create mode 100644 .vscode/settings.json
create mode 100644 backend/src/main/java/com/yfd/platform/common/DynamicSQLMapper.java
create mode 100644 backend/src/main/java/com/yfd/platform/utils/QueryWrapperUtil.java
create mode 100644 backend/src/test/java/com/yfd/platform/utils/QueryWrapperUtilTest.java
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..9136848
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+ "editor.codeLens": true,
+ "java.test.editor.enableShortcuts": true,
+ "testing.gutterEnabled": true
+}
diff --git a/backend/src/main/java/com/yfd/platform/common/DynamicSQLMapper.java b/backend/src/main/java/com/yfd/platform/common/DynamicSQLMapper.java
new file mode 100644
index 0000000..adefb25
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/common/DynamicSQLMapper.java
@@ -0,0 +1,262 @@
+package com.yfd.platform.common;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 通用动态 SQL Mapper。
+ *
+ * 说明:
+ *
+ * 1. 该接口通过注解 SQL 直接执行动态查询,适用于“表名/联表 SQL/查询列”需要运行期决定的场景;
+ * 2. 带 {@code QueryWrapper} 的方法统一使用 {@code ew.customSqlSegment} 追加条件;
+ * 3. 传入的 {@code sql}/{@code select}/{@code tableName} 属于动态片段,请在上层确保来源可信,避免注入风险。
+ */
+@Mapper
+public interface DynamicSQLMapper {
+
+ /**
+ * 分页执行完整 SQL(SQL 内可使用 map 参数)。
+ */
+ @Select({""})
+ List