升级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();
                }
            });
        });
    }
}



相关文章
|
3月前
|
XML 数据格式
【Azure Cloud Service】云服务升级后,查看配置文件发现编码变为utf-16
【Azure Cloud Service】云服务升级后,查看配置文件发现编码变为utf-16
|
3月前
|
Java
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
|
3月前
|
安全 Java 应用服务中间件
【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
|
3月前
|
应用服务中间件 Linux 网络安全
【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
|
3月前
|
异构计算
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是增或改
|
5月前
|
应用服务中间件 Linux 网络安全
PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
在Azure App Service for Linux上部署的PHP应用遇到上传文件超过1MB时出现413 Request Entity Too Large错误的解决之法
222 0
|
SQL 关系型数据库 MySQL
MySQL中sp运行check表版本更新流程解析
MySQL中sp运行check表版本更新流程解析
229 0
多model项目下,某个项目引用了公共lib下的service, 其他模块想不受影响的启动解决办法
多model项目下,某个项目引用了公共lib下的service, 其他模块想不受影响的启动解决办法
74 0
|
数据库
GreenDao 兼容升级,保留旧数据的---全方面解决方案
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguanh/ GitHub : https://github.
1705 0