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类型即可正常实现功能

相关推荐
程序员爱钓鱼11 小时前
Python 综合项目实战:学生成绩管理系统(命令行版)
后端·python·ipython
程序员爱钓鱼11 小时前
REST API 与前后端交互:让应用真正跑起来
后端·python·ipython
Dcs13 小时前
Java 中 UnaryOperator 接口与 Lambda 表达式的应用示例
java·后端
bagadesu15 小时前
使用Docker构建Node.js应用的详细指南
java·后端
勇哥java实战分享18 小时前
第一次用 Ollama 跑视觉模型:Qwen2.5-VL 7B 给了我一个意外惊喜
后端
码事漫谈19 小时前
从后端开发者到Agent工程师:一份系统性的学习指南
后端
码事漫谈19 小时前
后端开发如何将创新转化为专利?案例、流程与实操指南
后端
小坏讲微服务20 小时前
SpringCloud零基础学全栈,实战企业级项目完整使用
后端·spring·spring cloud
humors22121 小时前
服务端开发案例(不定期更新)
java·数据库·后端·mysql·mybatis·excel
Easonmax1 天前
用 Rust 打造可复现的 ASCII 艺术渲染器:从像素到字符的完整工程实践
开发语言·后端·rust