在myBatis中键入selectList

时间:2012-10-26 07:58:09

标签: java ibatis mybatis

我正在从iBatis迁移到myBatis并且我遇到了这个问题:当我调用selectList方法时,它返回List<Object>而不是正确的类型(例如List<Document>)所以我得到了一个错误在这里:

return createFiscalCodesMap(getSqlSession().selectList(STMT_LOAD, parameters));

private Map<String, String> createFiscalCodesMap(List<Document> documentList) { ... }

这是涉及的xml元素:

<select id="load" parameterType="java.util.Map" resultType="Document">...</select>

我已经读过selectList返回一个类型列表(List<E>),但我无法弄清楚如何获取它。

PS:我正在编写代码以自动迁移到myBatis,因此我需要一种方法来解决问题,而不会改变很多东西。

修改: 我正在尝试不同的解决方案,我无法弄清问题在哪里。

这不起作用(错误:无法从List<Object>投射到List<Document>):

return createFiscalCodesMap((List<Document>) getSqlSession().selectList(STMT_LOAD, parameters)); 

这有效:

List<Document> temp = getSqlSession().selectList(STMT_LOAD, parameters);
return createFiscalCodesMap(temp);

1 个答案:

答案 0 :(得分:1)

由于selectList方法是使用泛型定义的,并且您没有使用泛型进行方法调用,因此返回对象列表是正常的。

避免错误的正确方法应该是使用泛型调用selectList:

return createFiscalCodesMap(getSqlSession().<Document>selectList(STMT_LOAD, parameters));

请注意,自MyBatis 3.1.0起支持带有泛型的selectList,因此请确保使用3.1.0+来完成此工作。