A TupleBackedMap cannot be modified Mybatis分页,使用List<Map>接参,无法修改map的解决方案

问题描述

当使用Mybatis 进行Page分页,再使用Page< map >作为接受参数。此时尝试修改map则会报错。

报错为

javascript 复制代码
java.lang.UnsupportedOperationException: A TupleBackedMap cannot be modified

解决方案

使用新的数组,使用反射,构建工具类,自动将原值拷贝到对应的类上,完成转换。直接上代码

javascript 复制代码
/**
 * 用于解决mybatis 查询List<map>后无法修改的问题
 * @author hh
 * @date 2023/8/3
 */
public class MybatisMapUpdateUtils {

    public static void main(String[] args) throws Exception {

        Map<String,Object> map  = new HashMap<>();
        map.put("userName","吉吉强");
        List<Map<String,Object>>list = new ArrayList<>();
        list.add(map);
        List<UserDto> object = (List<UserDto>) getObject(list, UserDto.class);
        System.out.println(object);

    }

    public static Object getObject(List<Map<String,Object>>map, Class className) throws Exception {
        List<Object> arrayList = new ArrayList<>();
        for (Map<String,Object> vo: map){
            Constructor constructors = className.getConstructor();
            Object instance = constructors.newInstance();
            for (String key:vo.keySet()){
                System.out.println("key=  "+key+"   and value=  "+vo.get(key));
                try {
                    Field field = className.getDeclaredField(key);
                    field.setAccessible(true);
                    field.set(instance,vo.get(key));
                } catch (Exception e){
                    System.out.println("field not found");
                }
            }
            arrayList.add(instance);
            }
        return  arrayList;
    }

}

测试打印后,结果正常

javascript 复制代码
key=  userName   and value=  吉吉强
[UserDto(userName=吉吉强)]

进程已结束,退出代码0
相关推荐
易雪寒5 分钟前
Java List 根据List中对象的属性值是否相同作为同一组,分割成多个连续的子List
java·数据结构·list·分组切割
user_admin_god8 分钟前
Windows安装Opencode和Claude Code使用
windows·prompt·aigc·ai编程
LSL666_26 分钟前
BaseMapper——新增和删除
java·开发语言·mybatis·mybatisplus
春日见27 分钟前
UniAD的逻辑,与传统自动驾驶的差异
人工智能·windows·git·机器学习·docker·容器·自动驾驶
idolao39 分钟前
MySQL 8.4安装教程 Windows版:解压+自定义路径+密码设置+命令行客户端快捷方式创建指南
windows
摇滚侠42 分钟前
IDEA 开发,Mybatis 中,@Insert 注解如何提示出列名
java·intellij-idea·mybatis
开开心心就好1 小时前
免费轻量级PDF阅读器,打开速度快
windows·计算机视觉·visualstudio·pdf·计算机外设·excel·myeclipse
小王不爱笑1321 小时前
MyBatis-Plus 核心知识点
mybatis
码界奇点2 小时前
基于Spring MVC和MyBatis的妖气山视频管理系统设计与实现
java·spring·毕业设计·mvc·mybatis·源代码管理
indexsunny2 小时前
互联网大厂Java面试实战:从Spring Boot到微服务与Kafka的深度探讨
java·spring boot·junit·kafka·mybatis·hibernate·microservices