我正在从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);
答案 0 :(得分:1)
由于selectList方法是使用泛型定义的,并且您没有使用泛型进行方法调用,因此返回对象列表是正常的。
避免错误的正确方法应该是使用泛型调用selectList:
return createFiscalCodesMap(getSqlSession().<Document>selectList(STMT_LOAD, parameters));
请注意,自MyBatis 3.1.0起支持带有泛型的selectList,因此请确保使用3.1.0+来完成此工作。