mybatis查詢結果集有泛型屬性時可能出現的問題。
阿新 • • 發佈:2021-01-09
mybatis查詢結果集有泛型屬性時可能出現的問題。
問題:當接收結果為map或者物件的屬性為泛型時:
@Data
public class GenericKeyValueVo<K,V> {
private K key;
private V value;
}
這時候如果直接將resultType指向物件全限定名稱時,可能會出現問題。因為如果查詢結果的某個欄位大於1000會出現","如:1,000.56 。mybatis不會報錯,因為這個物件的這個屬性為泛型,可以接收。而當獲取結果之後即使定義接收的變數型別為:
第二個屬性也會存入String型別的值。後續再處理可能就會出現將string轉為double資料型別轉換錯誤。
解決方法:
定義一個resultMap,指明javaType
<resultMap id="StrKeyDoubleValueMap" type="com.meinergy.mkting.commons.entity.wholesale.vo.GenericKeyValueVo">
<result column="key" property="key" javaType= "java.lang.String"/>
<result column="value" property="value" javaType="java.lang.Double"/>
</resultMap>
再用一個convert函式規範查詢結果格式
convert(FORMAT(queryResult, decimal(12, 2))