我正在从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);

最佳答案

由于selectList方法是在考虑泛型的情况下定义的,并且您没有在方法调用中使用泛型,因此返回对象列表是正常的。

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

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


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

关于java - 在myBatis中键入selectList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13083023/

10-13 07:16