簡體   English   中英

為什么我不能從地圖上獲得價值 <String,String> 從基於mybatis的sql查詢中獲取的變量?

[英]Why cann't I get a value from a Map<String,String> variable that got from mybatis-based sql query?

使用mybatis處理oracle數據庫查詢操作時遇到了一個魔術問題。 我從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數據庫中獲取“ Date”類型的值並將該值設置為String類型變量時,發生了異常:

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

讓我感到困惑的是,為什么可以查詢並獲得結果,但是當我從地圖中獲得價值時卻不能接受?

除了這個問題的原因,我也很好奇滿足這種查詢需求的解決方案。謝謝您的幫助!

我認為String date = dataMap.get("startDate"); String date = (String)Object; ,如果object不是String,則拋出ClassCastException,可以將Map<String, String>更改為Map<String, Object>或創建mybatis typeHandlers。 您可以嘗試一下,我不確定我是對的,但是希望我能為您提供幫助。

Java泛型類型在編譯后將被擦除,因此map中的值的類型是實際類型,而不是您通過泛型聲明的類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM