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