From 6d1f7a9ad0b10e4f088dc71a96e6c94f39e32981 Mon Sep 17 00:00:00 2001 From: charle004 <937002632@qq.com> Date: Mon, 19 Aug 2024 18:08:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=90=8C=E4=B8=80=E7=82=B9?= =?UTF-8?q?=E7=9A=84Tag=E5=AE=9E=E4=BD=93=E7=B1=BB=E7=9B=B8=E4=BA=92?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=97=B6=EF=BC=8C=E6=98=A0=E5=B0=84=E7=9A=84?= =?UTF-8?q?Object=E7=B1=BB=E5=9E=8B=E5=8F=AF=E8=83=BD=E5=8F=91=E7=94=9F?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ngbatis/handler/ObjectResultHandler.java | 2 +- .../contrib/ngbatis/utils/ResultSetUtil.java | 46 +++++++++---------- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/nebula/contrib/ngbatis/handler/ObjectResultHandler.java b/src/main/java/org/nebula/contrib/ngbatis/handler/ObjectResultHandler.java index f588de7d..46fcc077 100644 --- a/src/main/java/org/nebula/contrib/ngbatis/handler/ObjectResultHandler.java +++ b/src/main/java/org/nebula/contrib/ngbatis/handler/ObjectResultHandler.java @@ -57,7 +57,7 @@ public Object handle( for (int i = 0; i < columnNames.size(); i++) { ValueWrapper valueWrapper = record.values().get(i); - Object v = ResultSetUtil.getValue(valueWrapper); + Object v = ResultSetUtil.getValue(valueWrapper,resultType); newResult = fillResult(v, newResult, columnNames, resultType, i); } diff --git a/src/main/java/org/nebula/contrib/ngbatis/utils/ResultSetUtil.java b/src/main/java/org/nebula/contrib/ngbatis/utils/ResultSetUtil.java index 57f9699b..805ae5cb 100644 --- a/src/main/java/org/nebula/contrib/ngbatis/utils/ResultSetUtil.java +++ b/src/main/java/org/nebula/contrib/ngbatis/utils/ResultSetUtil.java @@ -79,24 +79,26 @@ public class ResultSetUtil { * @param 目标结果类型 * @return */ - public static T getValue(ValueWrapper value) { + public static T getValue(ValueWrapper value,Class resultType) { try { Object o = value.isLong() ? value.asLong() - : value.isBoolean() ? value.asBoolean() - : value.isDouble() ? value.asDouble() - : value.isString() ? value.asString() + : value.isBoolean() ? value.asBoolean() + : value.isDouble() ? value.asDouble() + : value.isString() ? value.asString() : value.isTime() ? transformTime(value.asTime()) - : value.isDate() ? transformDate(value.asDate()) - : value.isDateTime() ? transformDateTime(value.asDateTime()) - : value.isVertex() ? transformNode(value.asNode()) - : value.isEdge() ? transformRelationship(value) - : value.isPath() ? value.asPath() - : value.isList() ? transformList(value.asList()) - : value.isSet() ? transformSet(value.asSet()) - : value.isMap() ? transformMap(value.asMap()) - : value.isDuration() ? transformDuration(value.asDuration()) - : null; - + : value.isDate() ? transformDate(value.asDate()) + : value.isDateTime() ? transformDateTime(value.asDateTime()) + : value.isVertex() ? transformNode(value.asNode(),resultType) + : value.isEdge() ? transformRelationship(value) + : value.isPath() ? value.asPath() + : value.isList() ? transformList(value.asList()) + : value.isSet() ? transformSet(value.asSet()) + : value.isMap() ? transformMap(value.asMap()) + : value.isDuration() ? transformDuration(value.asDuration()) + : null; + if (o instanceof Number) { + o = castNumber((Number) o, resultType); + } return (T) o; } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); @@ -106,15 +108,11 @@ public static T getValue(ValueWrapper value) { /** * 根据 resultType 从 nebula 的数据类型中获取 java 类型数据 * @param valueWrapper nebula 的数据类型 - * @param resultType 接口返回值类型(类型为集合时,为集合泛型) * @param 调用方用来接收结果的类型,即 resultType * @return java类型结果 */ - public static T getValue(ValueWrapper valueWrapper, Class resultType) { - T value = getValue(valueWrapper); - if (value instanceof Number) { - value = (T) castNumber((Number) value, resultType); - } + public static T getValue(ValueWrapper valueWrapper) { + T value = getValue(valueWrapper,null); return value; } @@ -149,16 +147,16 @@ private static Object transformDuration(DurationWrapper du) { return java.time.Duration.ofNanos(du.getSeconds() * 1000000000); } - private static Object transformNode(Node node) { + private static Object transformNode(Node node,Class resultType) { MapperContext mapperContext = MapperProxy.ENV.getMapperContext(); Map> tagTypeMapping = mapperContext.getTagTypeMapping(); - Class nodeType = null; + Class nodeType = resultType; List tagNames = node.tagNames(); for (String tagName : tagNames) { Class tagType = tagTypeMapping.get(tagName); boolean tagTypeIsSuperClass = isCurrentTypeOrParentType(nodeType, tagType); - if (!tagTypeIsSuperClass) { + if (!tagTypeIsSuperClass && nodeType.isAssignableFrom(tagType)) { nodeType = tagType; } }