diff --git a/src/main/java/org/redkale/annotation/Param.java b/src/main/java/org/redkale/annotation/Param.java
new file mode 100644
index 000000000..c5aa917c3
--- /dev/null
+++ b/src/main/java/org/redkale/annotation/Param.java
@@ -0,0 +1,32 @@
+/*
+ *
+ */
+package org.redkale.annotation;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.PARAMETER;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * 参数名注解,编译时加上 -parameters 参数可以不用此注解
+ *
+ *
+ * 详情见: https://redkale.org
+ *
+ * @author zhangjx
+ *
+ * @since 2.8.0
+ */
+@Inherited
+@Documented
+@Target({PARAMETER})
+@Retention(RUNTIME)
+public @interface Param {
+
+ String value();
+
+ String comment() default "";
+}
diff --git a/src/main/java/org/redkale/source/DataNativeSqlParser.java b/src/main/java/org/redkale/source/DataNativeSqlParser.java
index d8e3da3cd..ec253020d 100644
--- a/src/main/java/org/redkale/source/DataNativeSqlParser.java
+++ b/src/main/java/org/redkale/source/DataNativeSqlParser.java
@@ -11,10 +11,10 @@ import org.redkale.util.RedkaleClassLoader;
/**
*
* 原生的sql解析器
- * 参数变量有三种方式:
- * #{xx.xx}: 用于拼接sql的变量, 变量值必需的
- * ${xx.xx}: 用于预编译的sql的参数变量
- * $${xx.xx}: 用于预编译的sql的参数变量, 变量值必需的
+ * 参数变量有三种方式(与Mybatis的占位符类似):
+ * ${xx.xx}: 用于直接拼接sql的变量,不做任何转义, 变量值必需的
+ * #{xx.xx}: 用于预编译的sql的参数变量
+ * ##{xx.xx}: 用于预编译的sql的参数变量, 变量值必需的
*
*
* 详情见: https://redkale.org
diff --git a/src/main/java/org/redkale/source/DataNativeSqlStatement.java b/src/main/java/org/redkale/source/DataNativeSqlStatement.java
index 629ece20e..1f3952d7f 100644
--- a/src/main/java/org/redkale/source/DataNativeSqlStatement.java
+++ b/src/main/java/org/redkale/source/DataNativeSqlStatement.java
@@ -42,7 +42,7 @@ public class DataNativeSqlStatement {
//根据参数值集合重新生成的带?参数可执行的计算总数sql,用于返回Sheet对象
protected String nativeCountSql;
- //需要预编译的$${xxx}、${xxx}参数名, 数量与sql中的?数量一致
+ //需要预编译的##{xxx}、#{xxx}参数名, 数量与sql中的?数量一致
protected List paramNames;
//需要预编译的jdbc参数名, 数量与sql中的?数量一致
diff --git a/src/test/java/org/redkale/test/source/parser/ForumInfoMapper.java b/src/test/java/org/redkale/test/source/parser/ForumInfoMapper.java
index c1ea3e268..28a77c5f6 100644
--- a/src/test/java/org/redkale/test/source/parser/ForumInfoMapper.java
+++ b/src/test/java/org/redkale/test/source/parser/ForumInfoMapper.java
@@ -16,28 +16,28 @@ public interface ForumInfoMapper extends BaseMapper {
@Sql("SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ " WHERE f.forumid = s.forumid AND "
- + "s.forum_sectionid = ${bean.forumSectionid} AND "
- + "f.forumid = ${bean.forumid} AND s.forum_section_color = ${bean.forumSectionColor}")
+ + "s.forum_sectionid = #{bean.forumSectionid} AND "
+ + "f.forumid = #{bean.forumid} AND s.forum_section_color = #{bean.forumSectionColor}")
public ForumResult findForumResult(ForumBean bean);
@Sql("SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ " WHERE f.forumid = s.forumid AND "
- + "s.forum_sectionid = ${bean.forumSectionid} AND "
- + "f.forumid = ${bean.forumid} AND s.forum_section_color = ${bean.forumSectionColor}")
+ + "s.forum_sectionid = #{bean.forumSectionid} AND "
+ + "f.forumid = #{bean.forumid} AND s.forum_section_color = #{bean.forumSectionColor}")
public CompletableFuture findForumResultAsync(ForumBean bean);
@Sql("SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ " WHERE f.forumid = s.forumid AND "
- + "s.forum_sectionid = ${bean.forumSectionid} AND "
- + "f.forumid = ${bean.forumid} AND s.forum_section_color = ${bean.forumSectionColor}")
+ + "s.forum_sectionid = #{bean.forumSectionid} AND "
+ + "f.forumid = #{bean.forumid} AND s.forum_section_color = #{bean.forumSectionColor}")
public List queryForumResult(ForumBean bean);
@Sql("SELECT f.forum_groupid, s.forum_section_color "
+ "FROM forum_info f, forum_section s "
+ " WHERE f.forumid = s.forumid AND "
- + "s.forum_sectionid = ${bean.forumSectionid} AND "
- + "f.forumid = ${bean.forumid} AND s.forum_section_color = ${bean.forumSectionColor}")
+ + "s.forum_sectionid = #{bean.forumSectionid} AND "
+ + "f.forumid = #{bean.forumid} AND s.forum_section_color = #{bean.forumSectionColor}")
public CompletableFuture> queryForumResultAsync(ForumBean bean);
}