Ver Fonte

Merge pull request #3750 from chenleii/3.0

修复自动构建resultMap时主键字段映射错误&OrderBySegmentList懒加载执行
qmdx há 3 anos atrás
pai
commit
10e614e955

+ 3 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/OrderBySegmentList.java

@@ -17,6 +17,7 @@ package com.baomidou.mybatisplus.core.conditions.segments;
 
 import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import static com.baomidou.mybatisplus.core.enums.SqlKeyword.ORDER_BY;
@@ -34,9 +35,9 @@ public class OrderBySegmentList extends AbstractISegmentList {
     @Override
     protected boolean transformList(List<ISqlSegment> list, ISqlSegment firstSegment, ISqlSegment lastSegment) {
         list.remove(0);
-        final String sql = list.stream().map(ISqlSegment::getSqlSegment).collect(joining(SPACE));
+        final List<ISqlSegment> sqlSegmentList = new ArrayList<>(list);
         list.clear();
-        list.add(() -> sql);
+        list.add(() -> sqlSegmentList.stream().map(ISqlSegment::getSqlSegment).collect(joining(SPACE)));
         return true;
     }
 

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableInfo.java

@@ -455,7 +455,7 @@ public class TableInfo implements Constants {
             String id = currentNamespace + DOT + MYBATIS_PLUS + UNDERSCORE + entityType.getSimpleName();
             List<ResultMapping> resultMappings = new ArrayList<>();
             if (havePK()) {
-                ResultMapping idMapping = new ResultMapping.Builder(configuration, keyProperty, keyColumn, keyType)
+                ResultMapping idMapping = new ResultMapping.Builder(configuration, keyProperty, StringUtils.getTargetColumn(keyColumn), keyType)
                     .flags(Collections.singletonList(ResultFlag.ID)).build();
                 resultMappings.add(idMapping);
             }

+ 34 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/LambdaQueryWrapperTest.java

@@ -0,0 +1,34 @@
+package com.baomidou.mybatisplus.core.conditions;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.Data;
+import org.junit.jupiter.api.Test;
+
+/**
+ * @author miemie
+ * @since 2021-01-27
+ */
+class LambdaQueryWrapperTest extends BaseWrapperTest {
+
+    @Test
+    void testLambdaOrderBySqlSegment() {
+        Wrappers.<Table>lambdaQuery()
+            .orderByDesc(Table::getId);
+    }
+
+
+    @Data
+    @TableName( "xxx")
+    private static class Table {
+
+        @TableId("`id`")
+        private Long id;
+
+        @TableField("`name`")
+        private Long name;
+    }
+
+}

+ 28 - 4
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/metadata/TableInfoHelperTest.java

@@ -1,9 +1,6 @@
 package com.baomidou.mybatisplus.test.metadata;
 
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.config.GlobalConfig;
 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
@@ -12,9 +9,11 @@ import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.apache.ibatis.builder.MapperBuilderAssistant;
+import org.apache.ibatis.mapping.ResultMap;
 import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -223,4 +222,29 @@ class TableInfoHelperTest {
     private static class Table2 {
 
     }
+
+
+
+    @Test
+    void testTableAutoResultMap() {
+        MybatisConfiguration configuration = new MybatisConfiguration();
+        TableInfo tableInfo = TableInfoHelper.initTableInfo(new MapperBuilderAssistant(configuration, ""), AutoResultMapTable.class);
+        final ResultMap resultMap = tableInfo.getConfiguration().getResultMap(tableInfo.getResultMap());
+
+        assertThat(resultMap)
+            .isNotNull()
+            .extracting(ResultMap::getMappedColumns)
+            .matches((set) -> set.stream().noneMatch(StringUtils::isNotColumnName));
+    }
+
+    @Data
+    @TableName(value = "xxx", autoResultMap = true )
+    private static class AutoResultMapTable{
+
+        @TableId("`id`")
+        private Long id;
+
+        @TableField("`name`")
+        private Long name;
+    }
 }