美文网首页
使用泛型抽取 mybatis service 公共方法,报错:c

使用泛型抽取 mybatis service 公共方法,报错:c

作者: lz做过前端 | 来源:发表于2023-12-26 14:31 被阅读0次

AbstractLambdaWrapper 最终会调用 columnToString(SFunction<T, ?> column, boolean onlyColumn)
调用 getColumn(LambdaUtils.resolve(column), onlyColumn)

核心逻辑

Class<?> aClass = lambda.getInstantiatedType();
if (!initColumnMap) {
    columnMap = LambdaUtils.getColumnMap(aClass);
    initColumnMap = true;
}
Assert.notNull(columnMap, "can not find lambda cache for this entity [%s]", aClass.getName());

此时 lambda 为 SFunction -> IndexQuoteCommon::getIfValid
aClass 为 IndexQuoteCommon(公共实体抽象类或者接口,因为你要抽取公共逻辑是建立在公共的字段上的)

进到 LambdaUtils.getColumnMap(aClass) 方法

return COLUMN_CACHE_MAP.computeIfAbsent(clazz.getName(), key -> {
    TableInfo info = TableInfoHelper.getTableInfo(clazz);
    return info == null ? null : createColumnCacheMap(info);
});

COLUMN_CACHE_MAP 是被标记了 @TableName("xxx") 才会被缓存的表字段,而我们的抽象类IndexQuoteCommon 实际上是不在这个数据字典类的
最终报错:can not find lambda cache for this entity [%s]
或者:com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: 该方法仅能传入 lambda 表达式产生的合成类
注:TableInfo 是 mybatis 的对表描述的类

有没方式解决呢?如果只从 lambda 角度去实现,可能不太现实,因为抽象类必须要被加载到COLUMN_CACHE_MAP。
我们可以使用普通字符串 query 方式,直接绕过 columnToString 方式

相关文章

  • 泛型和反射在项目中的基本应用之一

    一般在抽取的公共类中会涉及到泛型,而泛型的类型需要用到反射类中的方法确定泛型类型。

  • ★13.泛型

    关于泛型 静态方法无法访问泛型的类型参数。(C++可以) Java泛型使用擦除实现,如运行时,List ,List...

  • 泛型的使用

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 泛型类 泛型接口 泛型通配符 泛型方法 静态方法与...

  • Java-API-集合框架(三)-泛型

    泛型的由来和基本使用 泛型的擦除 泛型类的使用 泛型方法的使用 泛型接口 泛型通配符(?) 通配符? 在api中的...

  • 分页查询

    分页查询使用Mybatis,SQL写法 Service层方法

  • Java泛型

    泛型 基本使用 在泛型类中使用,应用在接受多种类型的参数,保证向下转型的时候不会抛出异常 泛型方法 使用泛型方法时...

  • java基础-day13-泛型

    泛型 1. 泛型 1.1 为什么要使用泛型 1.2 泛型的基本格式 1.3 泛型在方法中使用 1.3 泛型在类内的...

  • 泛型基础二

    如果不明白为什么要使用泛型,使用泛型的好处,以及泛型类,泛型接口,泛型方法等知识,请移步泛型基础一 通配符 上界通...

  • java泛型

    一、泛型接口: 二、泛型方法 原则上,能够使用泛型方法的时候就尽量避免使用泛型类,这会使你的代码看上去更加清楚。另...

  • 泛型,复习

    Java泛型详解:和Class的使用。泛型类,泛型方法的详细使用实例 - LZJWXJ树袋熊 - CSDN博客

网友评论

      本文标题:使用泛型抽取 mybatis service 公共方法,报错:c

      本文链接:https://www.haomeiwen.com/subject/knulndtx.html