diff --git a/src/main/java/org/redkale/source/DataNativeSqlParser.java b/src/main/java/org/redkale/source/DataNativeSqlParser.java index 52a8a5ef4..790264a29 100644 --- a/src/main/java/org/redkale/source/DataNativeSqlParser.java +++ b/src/main/java/org/redkale/source/DataNativeSqlParser.java @@ -23,13 +23,13 @@ public interface DataNativeSqlParser { public static class NativeSqlInfo { - //根据参数值集合重新生成的可执行的sql + //根据参数值集合重新生成的带?参数可执行的sql protected String nativeSql; - //需要预编译的参数名 + //需要预编译的参数名, 数量与sql中的?数量一致 protected List paramNames; - //参数值集合 + //参数值集合, paramNames中的key必然会存在 protected Map paramValues; /** diff --git a/src/main/java/org/redkale/util/Copier.java b/src/main/java/org/redkale/util/Copier.java index c58abefa5..9b3178600 100644 --- a/src/main/java/org/redkale/util/Copier.java +++ b/src/main/java/org/redkale/util/Copier.java @@ -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 extends BiFunction { return load((Class) src.getClass(), HashMap.class, options).apply(src, dest); } + /** + * 创建源类到目标类的复制器并缓存 + * + * @param 目标类泛型 + * @param 源类泛型 + * @param destClass 目标类名 + * @param srcClass 源类名 + * @param options 可配项 + * + * @return 复制器 + */ + public static Function function(final Class srcClass, final Class destClass) { + Copier copier = load(srcClass, destClass); + Creator creator = Creator.load(destClass); + return src -> copier.apply(src, creator.create()); + } + /** * 创建源类到目标类的复制器并缓存 * @@ -173,6 +189,23 @@ public interface Copier extends BiFunction { return load(srcClass, destClass, 0); } + /** + * 创建源类到目标类的复制器并缓存 + * + * @param 目标类泛型 + * @param 源类泛型 + * @param destClass 目标类名 + * @param srcClass 源类名 + * @param options 可配项 + * + * @return 复制器 + */ + public static Function function(final Class srcClass, final Class destClass, final int options) { + Copier copier = load(srcClass, destClass, options); + Creator creator = Creator.load(destClass); + return src -> copier.apply(src, creator.create()); + } + /** * 创建源类到目标类的复制器并缓存 * @@ -859,25 +892,6 @@ public interface Copier extends BiFunction { 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);