在使用 Mybatis-plus 进行批量插入时遇到了 ClassGenricType not found 这个异常。具体的说就是 entity的 type 类型得不到对应。
发生的地方在使用 ServiceImpl
// 不指定泛型类型
public class TestService extends ServiceImpl {
}
// 不指定泛型类型
public interface TestMapper extends baseMapper {
}
所以你只需要指定好对应的泛型类型即可
// 指定泛型类型 public class TestService extends ServiceImpl2. 你没有在实体类上对应表{ } // 指定泛型类型 public interface TestMapper extends baseMapper { }
@TableName("test")
public class Test {
}
我遇到的问题原因以上都不是
public class MybaseServiceextends ServiceImpl { } public class TestService extends MybaseService { }
由于自己又搞了个base类继承ServiceImpl,所以当进行批量添加的时候,ClassGenricType not found。原因是
// mybatis-plus 中 entityClass protected Class> entityClass = this.currentModelClass(); // 取得 entityClass 注意传递了 1 protected ClasscurrentModelClass() { return ReflectionKit.getSuperClassGenericType(this.getClass(), 1); } // 大概意思就是获取父类 位置是1 的泛型 public static Class> getSuperClassGenericType(final Class> clazz, final int index) { Type genType = clazz.getGenericSuperclass(); if (!(genType instanceof ParameterizedType)) { logger.warn(String.format("Warn: %s's superclass not ParameterizedType", clazz.getSimpleName())); return Object.class; } else { Type[] params = ((ParameterizedType)genType).getActualTypeArguments(); if (index < params.length && index >= 0) { if (!(params[index] instanceof Class)) { logger.warn(String.format("Warn: %s not set the actual class on superclass generic parameter", clazz.getSimpleName())); return Object.class; } else { return (Class)params[index]; } } else { logger.warn(String.format("Warn: Index: %s, Size of %s's Parameterized Type: %s .", index, clazz.getSimpleName(), params.length)); return Object.class; } } }
所以获取父类 MybaseService
public class MybaseServiceextends ServiceImpl { }
总结:泛型位置也很重要。



