如何从MyBatis获取Map <string,integer =“”>?原因:java.sql.SQLException:getInt()的值无效-'NONE'

时间:2018-12-07 19:22:39

标签: mybatis spring-mybatis

我尝试遵循Return HashMap in mybatis and use it as ModelAttribute in spring MVC(选项1)和Mybatis ResultMap is HashMap<String,Object>。我有

@Select("select sources.host as 'key', count(*) total ... group by host")
@MapKey("key")
Map<String, Integer> getSourcesById(@Param("id")String id, @Param("hitDate")Date hitDate);

返回错误

  

尝试从结果集中获取列“键”时出错。原因:java.sql.SQLException:getInt()的值无效-'NONE'       ; SQL []; getInt()的值无效-'NONE';嵌套的异常为java.sql.SQLException:getInt()的值无效-'NONE'

查询在MySQL中工作正常并返回

| key         | total |
+-------------+-------+
| NONE        |    33 |
| twitter.com |     1 |

就好像没有使用@MapKey注释一样。


我尝试过

List<AbstractMap.SimpleEntry<String, Integer>> getSourcesById(...)

但是它给了

  

嵌套的异常是org.apache.ibatis.executor.ExecutorException:在java.util.AbstractMap $ SimpleEntry中找不到与[java.lang.String,java.lang.Long]匹配的构造函数

也尝试了同样的错误。

List<AbstractMap.SimpleEntry<String, Long>> 

https://docs.oracle.com/javase/7/docs/api/java/util/AbstractMap.SimpleEntry.html#constructor_summary

MyBatis 3.4.6,MyBatis-Spring 1.3.2

2 个答案:

答案 0 :(得分:0)

我必须建立自己的课程,但我不喜欢它。愚蠢的是,我不得不添加太多代码才能从数据库中获取简单的键/值对。

Pair.java
public class Pair<T1, T2> {
    public T1 key;
    public T2 value;

    public Pair(T1 k, T2 v) {
        key = k;
        value = v;
    }

    public Pair(String k, Long v) {
        key = (T1) k;
        value = (T2) v;
    }

    public T1 getKey() {
        return key;
    }

    public T2 getValue() {
        return value;
    }

}
Mapper.java
List<Pair<String, Long>> getSourcesById(@Param("id")String id, @Param("hitDate")Date hitDate);
Page.jsp
<c:forEach items="${sources}" var="s">${s.value},</c:forEach>

答案 1 :(得分:0)

您应该编写以下内容,

@Select("select sources.host as 'key', count(*) total ... group by host")
@MapKey("key")
Map<String, Map<String, Object>> getSourcesById(@Param("id")String id, @Param("hitDate")Date hitDate);

这是option-1的方式。