Как мне получить картуот MyBatis?Причина: java.sql.SQLException: Неверное значение для getInt () - 'NONE' - PullRequest
0 голосов
/ 07 декабря 2018

Я пытался следовать Вернуть HashMap в mybatis и использовать его в качестве ModelAttribute весной MVC (Вариант 1) и Mybatis ResultMap - это HashMap.У меня есть

@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 голосов
/ 13 декабря 2018

Вы должны написать следующее:

@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);

Это вариант варианта 1.

0 голосов
/ 07 декабря 2018

Я должен был построить свой собственный класс, но мне это не нравится.Глупо, что я должен добавить так много кода для получения простой пары ключ / значение из БД.

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>
...