MyBatis查询返回值为Map集合

通过@MapKey指定map的key值

1.在接口中写方法

java 复制代码
public interface IAccountDao {
    //返回一条记录的map;key就是列名,值就是对应的值
    Map<String,Object> selectAll(Integer id);

    /**
     * 此处若将map的key的类型改为其他类型,不影响@MapKey给map的key赋值
     * @return
     */
    @MapKey("name")//指定数据库中id字段作为map的key
    Map<String,Map<String,Object>> select();
}

2.在映射文件xml配置方法

原文链接

blog.csdn.net/xjszsd/arti...

遇到的小问题

用到的是第二种方法,目的是把平均分给统计上

java 复制代码
public List<SysActivityEvaluation> selectSysActivityEvaluationList(SysActivityEvaluation sysActivityEvaluation)
{
    //从平均分表中查出每个活动对应的平均分
    Map<String, Map<String,Object>> map = sysActivityEvaluationMapper.selectSysActivityEvaluationGrade();
    
    return sysActivityEvaluationMapper.selectSysActivityEvaluationList(sysActivityEvaluation)
            .stream()
            .map(s->{
        if (map.containsKey(s.getActivityId().toString())){
            System.out.println(1);
            BigDecimal two = new BigDecimal(map.get(s.getActivityId()).get("grade").toString());
            s.setGrade(two.setScale(2,BigDecimal.ROUND_HALF_DOWN).doubleValue());
        }
        return  s;
    }).collect(Collectors.toList());
}

代码很简单,如上图所示,但是有一个问题就是都可以获取到值activityId但是map.contains(s.getActivityId)却为null值;

经过一步步调试,我发现因为我的类型不一样,数据库里面是int类型,而我的实体类为Long类型,所以会找不到这个键,将其强转为Integer类型即可正常实现功能

相关推荐
蜗牛互联网9 分钟前
Python Agent 工具调用:审批令牌、参数白名单和累计预算
java·开发语言·人工智能·windows·后端·python
环境栈笔记9 分钟前
指纹浏览器检查代理失败怎么排查?先分清代理、网络和检测服务
前端·人工智能·后端·自动化
武子康31 分钟前
ESP32 唤醒词标称 98%,为什么还要自己做验收?
人工智能·后端·agent
william_yangshun1 小时前
WordCraft 观察:纯 Rust 重写文字处理器,把文档变成可编程对象
开发语言·后端·rust·文档自动化
IT_陈寒1 小时前
SpringBoot开发实战:从入门到精通
前端·人工智能·后端
geovindu2 小时前
rust: pool Pattern (续)
开发语言·后端·设计模式·rust·对象池简写模式
一条泥憨鱼2 小时前
拦截器与过滤器:一次请求穿过 Spring 时,会先经过谁呢
java·开发语言·后端·spring
郑州光合科技余经理2 小时前
本地生活服务系统:预约状态和进度通知接口怎么拆
java·开发语言·前端·javascript·后端·php·生活
tianbin9112 小时前
大模型训练全流程中,API聚合网关如何解决多模型调度难题
网络·后端
mldong2 小时前
工作流引擎的委托代批:一张单,两个办理人
后端·架构