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
相关推荐
dntktop2 小时前
解锁自动化新高度,zTasker v2.0全方位提升效率
运维·windows
蟾宫曲3 小时前
Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤
windows·npm·node.js·前端工具
不惑_3 小时前
List 集合安全操作指南:避免 ConcurrentModificationException 与提升性能
数据结构·安全·list
深海的鲸同学 luvi4 小时前
【HarmonyOS NEXT】hdc环境变量配置
linux·windows·harmonyos
老大白菜10 小时前
Windows 11 安装 Dify 完整指南 非docker环境
windows·docker·容器
秋恬意13 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
ue星空15 小时前
Windbg常用命令
windows
泰勒今天不想展开18 小时前
jvm接入prometheus监控
jvm·windows·prometheus
易我数据恢复大师20 小时前
怎么设置电脑密码?Windows和Mac设置密码的方法
windows·macos·电脑
m0_7482565620 小时前
Windows 11 Web 项目常见问题解决方案
前端·windows