瀏覽代碼

主键类型设置.

https://gitee.com/baomidou/mybatis-plus/issues/I171CQ#note_2158734
聂秋秋 5 年之前
父節點
當前提交
d30631e71c

+ 13 - 6
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableInfoHelper.java

@@ -26,6 +26,8 @@ import org.apache.ibatis.executor.keygen.SelectKeyGenerator;
 import org.apache.ibatis.logging.Log;
 import org.apache.ibatis.logging.LogFactory;
 import org.apache.ibatis.mapping.*;
+import org.apache.ibatis.reflection.Reflector;
+import org.apache.ibatis.reflection.ReflectorFactory;
 import org.apache.ibatis.scripting.LanguageDriver;
 import org.apache.ibatis.session.Configuration;
 
@@ -238,6 +240,9 @@ public class TableInfoHelper {
     public static void initTableFields(Class<?> clazz, GlobalConfig globalConfig, TableInfo tableInfo) {
         /* 数据库全局配置 */
         GlobalConfig.DbConfig dbConfig = globalConfig.getDbConfig();
+        ReflectorFactory reflectorFactory = tableInfo.getConfiguration().getReflectorFactory();
+        //TODO @咩咩 有空一起来撸完这反射模块.
+        Reflector reflector = reflectorFactory.findForClass(clazz);
         List<Field> list = getAllFields(clazz);
         // 标记是否读取到主键
         boolean isReadPK = false;
@@ -251,9 +256,9 @@ public class TableInfoHelper {
              */
             if (!isReadPK) {
                 if (existTableId) {
-                    isReadPK = initTableIdWithAnnotation(dbConfig, tableInfo, field, clazz);
+                    isReadPK = initTableIdWithAnnotation(dbConfig, tableInfo, field, clazz, reflector);
                 } else {
-                    isReadPK = initTableIdWithoutAnnotation(dbConfig, tableInfo, field, clazz);
+                    isReadPK = initTableIdWithoutAnnotation(dbConfig, tableInfo, field, clazz, reflector);
                 }
                 if (isReadPK) {
                     continue;
@@ -302,10 +307,11 @@ public class TableInfoHelper {
      * @param tableInfo 表信息
      * @param field     字段
      * @param clazz     实体类
+     * @param reflector Reflector
      * @return true 继续下一个属性判断,返回 continue;
      */
     private static boolean initTableIdWithAnnotation(GlobalConfig.DbConfig dbConfig, TableInfo tableInfo,
-                                                     Field field, Class<?> clazz) {
+                                                     Field field, Class<?> clazz, Reflector reflector) {
         TableId tableId = field.getAnnotation(TableId.class);
         boolean underCamel = tableInfo.isUnderCamel();
         if (tableId != null) {
@@ -335,7 +341,7 @@ public class TableInfoHelper {
                 tableInfo.setKeyRelated(checkRelated(underCamel, field.getName(), column))
                     .setKeyColumn(column)
                     .setKeyProperty(field.getName())
-                    .setKeyType(field.getType());
+                    .setKeyType(reflector.getGetterType(field.getName()));
                 return true;
             } else {
                 throwExceptionId(clazz);
@@ -352,10 +358,11 @@ public class TableInfoHelper {
      * @param tableInfo 表信息
      * @param field     字段
      * @param clazz     实体类
+     * @param reflector Reflector
      * @return true 继续下一个属性判断,返回 continue;
      */
     private static boolean initTableIdWithoutAnnotation(GlobalConfig.DbConfig dbConfig, TableInfo tableInfo,
-                                                        Field field, Class<?> clazz) {
+                                                        Field field, Class<?> clazz, Reflector reflector) {
         String column = field.getName();
         if (dbConfig.isCapitalMode()) {
             column = column.toUpperCase();
@@ -366,7 +373,7 @@ public class TableInfoHelper {
                     .setIdType(dbConfig.getIdType())
                     .setKeyColumn(column)
                     .setKeyProperty(field.getName())
-                    .setKeyType(field.getType());
+                    .setKeyType(reflector.getGetterType(field.getName()));
                 return true;
             } else {
                 throwExceptionId(clazz);

+ 3 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/test/EncryptTest.java

@@ -19,10 +19,12 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.EncryptUtils;
 import lombok.Data;
+import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -46,7 +48,7 @@ class EncryptTest {
 
     @Test
     void testTableInfoHelper() {
-        TableInfo info = TableInfoHelper.initTableInfo(null, Xx.class);
+        TableInfo info = TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), Xx.class);
         System.out.println("----------- AllInsertSqlColumn -----------");
         System.out.println(info.getAllInsertSqlColumnMaybeIf());
         System.out.println("----------- AllInsertSqlProperty -----------");

+ 3 - 1
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/test/WrapperTest.java

@@ -15,12 +15,14 @@
  */
 package com.baomidou.mybatisplus.core.test;
 
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.conditions.ISqlSegment;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.junit.jupiter.api.Test;
 
 import java.time.LocalDate;
@@ -187,7 +189,7 @@ class WrapperTest {
 
     @Test
     void testPluralLambda() {
-        TableInfoHelper.initTableInfo(null, User.class);
+        TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), User.class);
         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(User::getName, "sss");
         queryWrapper.lambda().eq(User::getName, "sss2");

+ 3 - 1
mybatis-plus-extension/src/test/kotlin/com/baomidou/mybatisplus/extension/kotlin/WrapperTest.kt

@@ -15,8 +15,10 @@
  */
 package com.baomidou.mybatisplus.extension.kotlin
 
+import com.baomidou.mybatisplus.core.MybatisConfiguration
 import com.baomidou.mybatisplus.core.conditions.ISqlSegment
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper
+import org.apache.ibatis.builder.MapperBuilderAssistant
 import org.junit.jupiter.api.BeforeEach
 import org.junit.jupiter.api.Test
 
@@ -24,7 +26,7 @@ class WrapperTest {
 
     @BeforeEach
     fun beforeInit() {
-        TableInfoHelper.initTableInfo(null, User::class.java)
+        TableInfoHelper.initTableInfo(MapperBuilderAssistant(MybatisConfiguration(), ""), User::class.java)
     }
 
     private fun logSqlSegment(explain: String, sqlSegment: ISqlSegment) {

+ 3 - 1
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/SampleTest.java

@@ -15,12 +15,14 @@
  */
 package com.baomidou.mybatisplus.test;
 
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.test.mysql.entity.CommonData;
 import com.baomidou.mybatisplus.test.mysql.entity.CommonLogicData;
+import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.apache.ibatis.reflection.DefaultReflectorFactory;
 import org.apache.ibatis.reflection.MetaClass;
 import org.junit.jupiter.api.Test;
@@ -29,7 +31,7 @@ class SampleTest {
 
     @Test
     void testTableInfoHelper2() {
-        TableInfo info = TableInfoHelper.initTableInfo(null, CommonLogicData.class);
+        TableInfo info = TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), CommonLogicData.class);
 //        System.out.println("----------- AllInsertSqlColumn -----------");
 //        System.out.println(info.getAllInsertSqlColumn());
 //        System.out.println("----------- AllInsertSqlProperty -----------");