Почему я не могу получить значение из переменной Map <String, String>, полученной из SQL-запроса на основе mybatis? - PullRequest
0 голосов
/ 14 января 2019

У меня возникла волшебная проблема при обработке запроса oracle db, работающего с mybatis. Я запрашиваю некоторые столбцы из моей базы данных Oracle и устанавливаю для resultType значение Map, запрос работал нормально, но когда я попытался получить значение из переменной Map и перенести значение в объект String, я получил исключение приведения: «java. sql.Timestamp нельзя привести к java.lang.String ”

Мой код Java Mapper выглядит следующим образом:

@Mapper
public interface DynamicDataMapper {
    Map<String, String> selectDataDetail(@Param("traceRuleDO") TraceRuleDO traceRuleDO, @Param("traceQueryVO") TraceQueryVO traceQueryVO);
}

Мои файлы сопоставления Mybatis XML выглядят следующим образом:

    <select id="selectDataDetail" resultType="java.util.Map" statementType="STATEMENT" >
       <!--select ${traceRuleDO.shownColumns}-->
        select *
        from ${traceRuleDO.tableName}
        where ${traceRuleDO.primaryKey} = ${traceQueryVO.keyValue}
        <if test="traceQueryVO.secondaryKeyName != null and traceQueryVO.secondaryKeyName != ''">
            and ${traceRuleDO.secondaryKey} = ${traceQueryVO.secondaryKeyValue}
        </if>
    </select>

Когда я запрашиваю таблицу с этим интерфейсом, запрос сработал. Но когда я попытался получить значение типа «Дата» в базе данных Oracle и попытался установить значение переменной типа String, произошло исключение:

String date = dataMap.get("startDate");//the startDate is of "Date” type in db

Что смутило меня, так это то, что нормально запрашивать и получать результат, но не тогда, когда я получил значение с карты?

Помимо причины этой проблемы, мне также любопытно найти решение для удовлетворения запросов такого типа. Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 16 января 2019

универсальные типы java будут стерты после компиляции, поэтому тип значения в карте был фактически типом, а не типом, который вы объявили универсальным

0 голосов
/ 14 января 2019

Я думаю, String date = dataMap.get("startDate");, как String date = (String)Object;, если объект не является String, то при исключении ClassCastException вы можете изменить Map<String, String> на Map<String, Object> или создать mybatis typeHandlers. ты можешь попробовать, я не уверен, что прав, но я надеюсь, что смогу помочь тебе.

...