DataSqlMapper优化

This commit is contained in:
redkale
2024-05-24 19:35:41 +08:00
parent b51259cb91
commit 05dd539f4f
5 changed files with 45 additions and 4 deletions

View File

@@ -10,7 +10,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 原始sql语句
* 原始sql语句, 标记在{@link org.redkale.source.DataSqlMapper}方法上
*
*
* <p>

View File

@@ -22,10 +22,43 @@ import org.redkale.util.Sheet;
* void/基本数据类型/JavaBean/Map/List/Sheet <br>
* 异步接口返回的是泛型为以上类型的CompletableFuture
*
* <blockquote><pre>
* public interface ForumInfoMapper extends BaseMapper&lt;ForumInfo&gt; {
*
* &#64;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);
*
* &#64;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&lt;ForumResult&gt; findForumResultAsync(ForumBean bean);
*
* &#64;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&lt;ForumResult&gt; queryForumResult(ForumBean bean);
*
* &#64;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&lt;List&lt;ForumResult&gt;&gt; queryForumResultAsync(&#64;Param("bean") ForumBean bean0);
*}
* </pre></blockquote>
* <p>
* 详情见: https://redkale.org
*
* @see org.redkale.source.spi.DataSqlMapperBuilder
* @see org.redkale.persistence.Sql
*
* @author zhangjx
* @param <T> T

View File

@@ -68,6 +68,7 @@ public interface DataSqlSource extends DataSource {
*
* @return 执行条数
*/
@ClassDepends
public int nativeUpdate(String sql, Map<String, Object> params);
/**
@@ -78,6 +79,7 @@ public interface DataSqlSource extends DataSource {
*
* @return 执行条数
*/
@ClassDepends
public CompletableFuture<Integer> nativeUpdateAsync(String sql, Map<String, Object> params);
/**

View File

@@ -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<AsmMethodParam> methodParams = methodBean.getParams();
List<Integer> 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);

View File

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