From 4bbe9635795e7d523629a3ce6cc911ee1679bfbd Mon Sep 17 00:00:00 2001 From: admin <570810310@qq.com> Date: Fri, 11 Jun 2021 10:44:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96resultMap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/metadata/MPJTableInfoHelper.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableInfoHelper.java b/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableInfoHelper.java index 4447bd2..3840386 100644 --- a/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableInfoHelper.java +++ b/src/main/java/com/baomidou/mybatisplus/core/metadata/MPJTableInfoHelper.java @@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.core.toolkit.*; import org.apache.ibatis.logging.Log; import org.apache.ibatis.logging.LogFactory; +import org.apache.ibatis.mapping.ResultFlag; +import org.apache.ibatis.mapping.ResultMap; +import org.apache.ibatis.mapping.ResultMapping; import org.apache.ibatis.reflection.Reflector; import org.apache.ibatis.reflection.ReflectorFactory; import org.apache.ibatis.session.Configuration; @@ -86,7 +89,7 @@ public class MPJTableInfoHelper { initTableFields(clazz, globalConfig, tableInfo, excludePropertyList); /* 自动构建 resultMap */ - tableInfo.initResultMapIfNeed(); + initResultMapIfNeed(tableInfo); /* 添加缓存 */ TABLE_INFO_CACHE.put(clazz, tableInfo); @@ -96,6 +99,33 @@ public class MPJTableInfoHelper { return tableInfo; } + + /** + * 自动构建 resultMap 并注入(如果条件符合的话) + */ + private static void initResultMapIfNeed(TableInfo tableInfo) { + if (tableInfo.isAutoInitResultMap() && null == tableInfo.getResultMap()) { + String id = tableInfo.getCurrentNamespace() + ".mybatis-plus-join_" + tableInfo.getEntityType().getSimpleName(); + tableInfo.setResultMap(id); + if (tableInfo.getConfiguration().getResultMapNames().contains(id)) { + tableInfo.getConfiguration().getResultMap(id); + } + List resultMappings = new ArrayList<>(); + if (tableInfo.havePK()) { + ResultMapping idMapping = new ResultMapping.Builder(tableInfo.getConfiguration(), tableInfo.getKeyProperty(), + tableInfo.getKeyColumn(), tableInfo.getKeyType()) + .flags(Collections.singletonList(ResultFlag.ID)).build(); + resultMappings.add(idMapping); + } + if (CollectionUtils.isNotEmpty(tableInfo.getFieldList())) { + tableInfo.getFieldList().forEach(i -> resultMappings.add(i.getResultMapping(tableInfo.getConfiguration()))); + } + ResultMap resultMap = new ResultMap.Builder(tableInfo.getConfiguration(), id, tableInfo.getEntityType(), + resultMappings).build(); + tableInfo.getConfiguration().addResultMap(resultMap); + } + } + /** *

* 初始化 表数据库类型,表名,resultMap