From 8aeeea92656571314eb6ee0ca867fd32fc879df9 Mon Sep 17 00:00:00 2001 From: yulichang <570810310@qq.com> Date: Mon, 7 Nov 2022 19:12:01 +0800 Subject: [PATCH] =?UTF-8?q?1.2.5=E7=89=88=E6=9C=AC=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yulichang/interceptor/MPJInterceptor.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java b/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java index 54df8c8..89a8f07 100644 --- a/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java +++ b/src/main/java/com/github/yulichang/interceptor/MPJInterceptor.java @@ -59,7 +59,7 @@ public class MPJInterceptor implements Interceptor { @Override - @SuppressWarnings({"Java8MapApi", "unchecked"}) + @SuppressWarnings("Java8MapApi") public Object intercept(Invocation invocation) throws Throwable { Object[] args = invocation.getArgs(); if (args[0] instanceof MappedStatement) { @@ -195,11 +195,10 @@ public class MPJInterceptor implements Interceptor { i.getKeyType()).build()); } }); - //移除result中不存在的标签 Set columnSet = resultMappings.stream().map(ResultMapping::getColumn).collect(Collectors.toSet()); + //移除result中不存在的标签 resultMappings.removeIf(i -> !fieldMap.containsKey(i.getProperty())); if (wrapper.isResultMap()) { - //先不考虑 去重 看一下能否实现 List> mybatisLabel = wrapper.getResultMapMybatisLabel(); for (MybatisLabel mpjColl : mybatisLabel) { List list = mpjColl.getResultList(); @@ -209,11 +208,12 @@ public class MPJInterceptor implements Interceptor { List childMapping = new ArrayList<>(list.size()); for (Result r : list) { String columnName = r.getColumn(); + //列名去重 columnName = getColumn(columnSet, columnName); columnList.add(SelectColumn.of(mpjColl.getEntityClass(), r.getColumn(), null, Objects.equals(columnName, r.getColumn()) ? null : columnName, null, null, null)); ResultMapping.Builder builder = new ResultMapping.Builder(ms.getConfiguration(), r.getProperty(), columnName, r.getJavaType()); - if (r.isId()) { + if (r.isId()) {//主键标记为id标签 builder.flags(Collections.singletonList(ResultFlag.ID)); } childMapping.add(builder.build()); @@ -226,12 +226,14 @@ public class MPJInterceptor implements Interceptor { .javaType(mpjColl.getJavaType()) .nestedResultMapId(childId) .build()); + //双检 if (!ms.getConfiguration().getResultMapNames().contains(childId)) { - ms.getConfiguration().addResultMap(new ResultMap.Builder(ms.getConfiguration(), childId, mpjColl.getOfType(), childMapping).build()); + ResultMap build = new ResultMap.Builder(ms.getConfiguration(), childId, mpjColl.getOfType(), childMapping).build(); + MPJInterceptor.addResultMap(ms, childId, build); } } } - result.add(0, new ResultMap.Builder(ms.getConfiguration(), id, resultType, resultMappings).build()); + result.add(new ResultMap.Builder(ms.getConfiguration(), id, resultType, resultMappings).build()); return result; } @@ -295,4 +297,13 @@ public class MPJInterceptor implements Interceptor { Assert.notNull(field, "Result Class <%s> not find Field <%s>", resultType.getSimpleName(), alias); return field.getType(); } + + /** + * 往 Configuration 添加resultMap + */ + public synchronized static void addResultMap(MappedStatement ms, String key, ResultMap resultMap) { + if (!ms.getConfiguration().getResultMapNames().contains(key)) { + ms.getConfiguration().addResultMap(resultMap); + } + } }