在使用mybatis做查询时,报了“Could not find result map java.lang.Long”异常错误,简单记录下。
报错信息
org.apache.ibatis.builder.IncompleteElementException: Could not find result map java.lang.Long at org.apache.ibatis.builder.MapperBuilderAssistant.getStatementResultMaps(MapperBuilderAssistant.java:346) at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:290) at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:109) at org.apache.ibatis.session.Configuration.buildAllStatements(Configuration.java:775) at org.apache.ibatis.session.Configuration.hasStatement(Configuration.java:745) at org.apache.ibatis.session.Configuration.hasStatement(Configuration.java:740) at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:217) at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) at com.sun.proxy.$Proxy97.registCount(Unknown Source)
主要原因
排查了一下,这里主要是因为在mapper.xml中,使用了resultMap,而resultMap主要用于将查询字段和对象的映射,而我们的sql查询结果希望是一个数值类型,这里主要是返回Long对象(也可以返回基本数据类型long)
处理方法
将resultMap修改为resultType即可,有时候修改了对应接口的标签属性之后,仍然报错,这个时候就要排查一下是不是mapper.xml其他地方出现了同样的错误,如果出现同样的错误,就算调用的不是当前的接口,也会报错。