diff --git a/src/main/java/org/redkale/persistence/Sql.java b/src/main/java/org/redkale/persistence/Sql.java index 01bcdf7b6..4ce849980 100644 --- a/src/main/java/org/redkale/persistence/Sql.java +++ b/src/main/java/org/redkale/persistence/Sql.java @@ -10,7 +10,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * 原始sql语句 + * 原始sql语句, 标记在{@link org.redkale.source.DataSqlMapper}方法上 * * *

diff --git a/src/main/java/org/redkale/source/DataSqlMapper.java b/src/main/java/org/redkale/source/DataSqlMapper.java index 6e928dd31..70a71dc9d 100644 --- a/src/main/java/org/redkale/source/DataSqlMapper.java +++ b/src/main/java/org/redkale/source/DataSqlMapper.java @@ -22,10 +22,43 @@ import org.redkale.util.Sheet; * void/基本数据类型/JavaBean/Map/List/Sheet
* 异步接口返回的是泛型为以上类型的CompletableFuture * + *

+ * public interface ForumInfoMapper extends BaseMapper<ForumInfo> {
+ *
+ *   @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}")
+ *   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}")
+ *   public CompletableFuture<ForumResult> 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}")
+ *   public List<ForumResult> 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}")
+ *   public CompletableFuture<List<ForumResult>> queryForumResultAsync(@Param("bean") ForumBean bean0);
+ *}
+ * 
*

* 详情见: https://redkale.org * * @see org.redkale.source.spi.DataSqlMapperBuilder + * @see org.redkale.persistence.Sql * * @author zhangjx * @param T diff --git a/src/main/java/org/redkale/source/DataSqlSource.java b/src/main/java/org/redkale/source/DataSqlSource.java index dca65c5eb..c440fc687 100644 --- a/src/main/java/org/redkale/source/DataSqlSource.java +++ b/src/main/java/org/redkale/source/DataSqlSource.java @@ -68,6 +68,7 @@ public interface DataSqlSource extends DataSource { * * @return 执行条数 */ + @ClassDepends public int nativeUpdate(String sql, Map params); /** @@ -78,6 +79,7 @@ public interface DataSqlSource extends DataSource { * * @return 执行条数 */ + @ClassDepends public CompletableFuture nativeUpdateAsync(String sql, Map params); /** diff --git a/src/main/java/org/redkale/source/spi/DataSqlMapperBuilder.java b/src/main/java/org/redkale/source/spi/DataSqlMapperBuilder.java index 1fd6ac606..2998e2683 100644 --- a/src/main/java/org/redkale/source/spi/DataSqlMapperBuilder.java +++ b/src/main/java/org/redkale/source/spi/DataSqlMapperBuilder.java @@ -6,12 +6,14 @@ package org.redkale.source.spi; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.lang.reflect.Parameter; import java.lang.reflect.ParameterizedType; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.function.IntFunction; +import org.redkale.annotation.Param; import org.redkale.asm.AsmMethodBean; import org.redkale.asm.AsmMethodBoost; import org.redkale.asm.AsmMethodParam; @@ -217,13 +219,14 @@ public final class DataSqlMapperBuilder { Class resultClass = resultClass(method); Class[] componentTypes = resultComponentType(method); final boolean async = method.getReturnType().isAssignableFrom(CompletableFuture.class); + Parameter[] params = method.getParameters(); Class[] paramTypes = method.getParameterTypes(); List methodParams = methodBean.getParams(); List insns = new ArrayList<>(); if (!EntityBuilder.isSimpleType(componentTypes[0])) { EntityBuilder.load(componentTypes[0]); } - + mv = new MethodDebugVisitor(cw.visitMethod(ACC_PUBLIC, method.getName(), methodBean.getDesc(), methodBean.getSignature(), null)).setDebug(false); Label l0 = new Label(); mv.visitLabel(l0); @@ -252,7 +255,9 @@ public final class DataSqlMapperBuilder { //参数名 mv.visitInsn(DUP); Asms.visitInsn(mv, i * 2); - mv.visitLdcInsn(methodParams.get(i).getName()); + Param p = params[i].getAnnotation(Param.class); + String k = p == null ? methodParams.get(i).getName() : p.value(); + mv.visitLdcInsn(k); mv.visitInsn(AASTORE); //参数值 mv.visitInsn(DUP); 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 28a77c5f6..51782539e 100644 --- a/src/test/java/org/redkale/test/source/parser/ForumInfoMapper.java +++ b/src/test/java/org/redkale/test/source/parser/ForumInfoMapper.java @@ -5,6 +5,7 @@ package org.redkale.test.source.parser; import java.util.List; import java.util.concurrent.CompletableFuture; +import org.redkale.annotation.Param; import org.redkale.persistence.Sql; /** @@ -39,5 +40,5 @@ public interface ForumInfoMapper extends BaseMapper { + " WHERE f.forumid = s.forumid AND " + "s.forum_sectionid = #{bean.forumSectionid} AND " + "f.forumid = #{bean.forumid} AND s.forum_section_color = #{bean.forumSectionColor}") - public CompletableFuture> queryForumResultAsync(ForumBean bean); + public CompletableFuture> queryForumResultAsync(@Param("bean") ForumBean bean0); }