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