[英]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.