通过@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配置方法
原文链接
遇到的小问题
用到的是第二种方法,目的是把平均分给统计上
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类型即可正常实现功能