升级mp新版本后,service里removeByIds主键类型不一致报错

简介: 升级mp新版本后,service里removeByIds主键类型不一致报错

先谋后事者逸,先事后图者失。——陈子昂

场景:

主键类型是Integer,使用serviceremoveByIds,传入List报错

MP用的mybatis的反射,只需要在表信息初始化后,获取反射的缓存map,往里面放入我们自定义的转换操作即可

代码如下:

import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import io.github.vampireachao.stream.core.reflect.ReflectHelper;
import io.github.vampireachao.stream.core.stream.Steam;
import org.apache.ibatis.reflection.Reflector;
import org.apache.ibatis.reflection.invoker.Invoker;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.ConversionService;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;
/**
 * @author VampireAchao
 * @since 2023/1/5 16:34
 */
@Configuration
public class MpConfig {
    public MpConfig(MybatisPlusAutoConfiguration config, ConversionService conversionService) {
        final List<TableInfo> tableInfos = TableInfoHelper.getTableInfos();
        Steam.of(tableInfos).parallel().forEach(tableInfo -> {
            final Reflector reflector = tableInfo.getReflector();
            final Map<String, Invoker> setMethods = ReflectHelper.getFieldValue(reflector, "setMethods");
            setMethods.computeIfPresent(tableInfo.getKeyProperty(), (k, v) -> new Invoker() {
                @Override
                public Object invoke(Object target, Object[] args) throws IllegalAccessException, InvocationTargetException {
                    final Object convert = conversionService.convert(args[0], v.getType());
                    return v.invoke(target, new Object[]{convert});
                }
                @Override
                public Class<?> getType() {
                    return v.getType();
                }
            });
        });
    }
}



目录
打赏
0
0
0
0
29
分享
相关文章
|
6月前
|
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
Galacean Engine 1.2 使用问题之ShaderLab新版本在场景功能方面有什么提升
Galacean Engine 1.2 使用问题之ShaderLab新版本在场景功能方面有什么提升
MybatisPlus--IService接口基本用法,MP提供了Service接口,save(T) 这里的意思是新增了一个T, saveBatch 是批量新增的意思,saveOrUpdate是增或改
MybatisPlus--IService接口基本用法,MP提供了Service接口,save(T) 这里的意思是新增了一个T, saveBatch 是批量新增的意思,saveOrUpdate是增或改
更新 runtime 版本
更新 runtime 版本
PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
在Azure App Service for Linux上部署的PHP应用遇到上传文件超过1MB时出现413 Request Entity Too Large错误的解决之法
244 0
|
9月前
|
工程支持xcframework,检查pod版本及更新pod
工程支持xcframework,检查pod版本及更新pod
91 0
解决新版本ffmpeg找不到avpriv_io_delete函数等问题
解决新版本ffmpeg找不到avpriv_io_delete函数等问题
126 0
Go 中使用 JSON 时,如何区分空字段和未设置字段
Go 中使用 JSON 时,如何区分空字段和未设置字段
675 0
kubenetes: patch更新和替换、删除资源内容
kubenetes: patch更新和替换、删除资源内容
1571 0
kubenetes: patch更新和替换、删除资源内容
更新卡券接口(alipay.pass.instance.update)JAVA版本小样
使用场景介绍 对于已经发布的卡券,商户可通过此接口进行更新,更新卡券接口包含三大主要功能:核销卡券、失效卡券、更新卡券样式内容  核销卡券功能  核销卡券主要描述开发者如何将发放出去的卡券进行核销,使卡券在用户的支付宝客户端展示为已使用状态。
637 12

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等