Mybatis @MapKey返回key的类型是怎么来的?

问题描述:
@MapKey("gradeId")
Map queryAnswerRecord(@Param("recordId")Long recordId);
这个gradeId本来是个Integer,这儿却要写成String。因为如果是Integer,在返回后直接取map.get(3),这样的会取不到。
默认的Integer缓存范围127之内不是都行么,为什么3就不行了?

这个问题查出来了,是因为即使Mybatis的Dao这样写返回的泛型:


@MapKey("gradeId")
Map<Integer, EvaluationOfflineAnswerVo> queryAnswerRecord(@Param("recordId")Long recordId);

但返回的Map的key的类型并不是由这里的泛型定义决定的,这里mybatis返回的key实际是String,所以取整型key是取不取到的。

@MapKey的用法,类型有坑。



解决方法:

@MapKey返回的Map的key的类型并不是由返回的Map的里的泛型决定的,那是什么决定的?这个是由返回对象对应的字段的get方法返回类型决定的。我上面的例子,之所以返回了String,是因为我的返回对象定义如下:
public class EvaluationOfflineAnswerVo{
    private Integer gradeId;
    
    public String getGradeId() {
        return gradeId==null?"":String.valueOf(gradeId);
    }
}
好了,把get方法返回类型改成Integer ,就可以结案了:
public Integer getGradeId() {
        return gradeId;
    }

文/中中 浏览次数:0次   2019-06-01 11:16:34

相关阅读

微信扫描-捐赠支持
加入QQ群-技术交流

评论: