Copier增加Function方法
This commit is contained in:
@@ -23,13 +23,13 @@ public interface DataNativeSqlParser {
|
||||
|
||||
public static class NativeSqlInfo {
|
||||
|
||||
//根据参数值集合重新生成的可执行的sql
|
||||
//根据参数值集合重新生成的带?参数可执行的sql
|
||||
protected String nativeSql;
|
||||
|
||||
//需要预编译的参数名
|
||||
//需要预编译的参数名, 数量与sql中的?数量一致
|
||||
protected List<String> paramNames;
|
||||
|
||||
//参数值集合
|
||||
//参数值集合, paramNames中的key必然会存在
|
||||
protected Map<String, Object> paramValues;
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,7 +21,6 @@ import static org.redkale.asm.Opcodes.ARETURN;
|
||||
import static org.redkale.asm.Opcodes.ASTORE;
|
||||
import static org.redkale.asm.Opcodes.CHECKCAST;
|
||||
import static org.redkale.asm.Opcodes.GETFIELD;
|
||||
import static org.redkale.asm.Opcodes.GETSTATIC;
|
||||
import static org.redkale.asm.Opcodes.GOTO;
|
||||
import static org.redkale.asm.Opcodes.IFEQ;
|
||||
import static org.redkale.asm.Opcodes.IFLE;
|
||||
@@ -159,6 +158,23 @@ public interface Copier<S, D> extends BiFunction<S, D, D> {
|
||||
return load((Class<S>) src.getClass(), HashMap.class, options).apply(src, dest);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建源类到目标类的复制器并缓存
|
||||
*
|
||||
* @param <D> 目标类泛型
|
||||
* @param <S> 源类泛型
|
||||
* @param destClass 目标类名
|
||||
* @param srcClass 源类名
|
||||
* @param options 可配项
|
||||
*
|
||||
* @return 复制器
|
||||
*/
|
||||
public static <S, D> Function<S, D> function(final Class<S> srcClass, final Class<D> destClass) {
|
||||
Copier<S, D> copier = load(srcClass, destClass);
|
||||
Creator<D> creator = Creator.load(destClass);
|
||||
return src -> copier.apply(src, creator.create());
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建源类到目标类的复制器并缓存
|
||||
*
|
||||
@@ -173,6 +189,23 @@ public interface Copier<S, D> extends BiFunction<S, D, D> {
|
||||
return load(srcClass, destClass, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建源类到目标类的复制器并缓存
|
||||
*
|
||||
* @param <D> 目标类泛型
|
||||
* @param <S> 源类泛型
|
||||
* @param destClass 目标类名
|
||||
* @param srcClass 源类名
|
||||
* @param options 可配项
|
||||
*
|
||||
* @return 复制器
|
||||
*/
|
||||
public static <S, D> Function<S, D> function(final Class<S> srcClass, final Class<D> destClass, final int options) {
|
||||
Copier<S, D> copier = load(srcClass, destClass, options);
|
||||
Creator<D> creator = Creator.load(destClass);
|
||||
return src -> copier.apply(src, creator.create());
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建源类到目标类的复制器并缓存
|
||||
*
|
||||
@@ -859,25 +892,6 @@ public interface Copier<S, D> extends BiFunction<S, D, D> {
|
||||
mv.visitMethodInsn(INVOKEINTERFACE, "java/lang/CharSequence", "length", "()I", true);
|
||||
mv.visitJumpInsn(IFLE, ifLabel);
|
||||
}
|
||||
if (false) {
|
||||
mv.visitVarInsn(ALOAD, 1);
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, "org/redkale/test/util/TestBean", "getName", "()Ljava/lang/String;", false);
|
||||
mv.visitVarInsn(ASTORE, 3);
|
||||
mv.visitVarInsn(ALOAD, 3);
|
||||
mv.visitJumpInsn(IFNULL, ifLabel);
|
||||
|
||||
|
||||
mv.visitVarInsn(ALOAD, 2);
|
||||
mv.visitFieldInsn(GETSTATIC, "java/lang/Long", "TYPE", "Ljava/lang/Class;");
|
||||
mv.visitVarInsn(ALOAD, 3);
|
||||
mv.visitMethodInsn(INVOKESTATIC, "org/redkale/util/Utility", "convertValue", "(Ljava/lang/reflect/Type;Ljava/lang/Object;)Ljava/lang/Object;", false);
|
||||
mv.visitTypeInsn(CHECKCAST, "java/lang/Integer");
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Integer", "intValue", "()I", false);
|
||||
mv.visitMethodInsn(INVOKEVIRTUAL, "org/redkale/test/util/TestXBean", "setId", "(I)V", false);
|
||||
mv.visitLabel(ifLabel);
|
||||
mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
|
||||
}
|
||||
|
||||
if (needTypeCast) {
|
||||
mv.visitVarInsn(ALOAD, 2);
|
||||
Asms.visitFieldInsn(mv, destFieldType);
|
||||
|
||||
Reference in New Issue
Block a user