简单实现:
----MyBatis的xml:
<mapper namespace="com.umbrella.core.user_manage.dao.ITestDao" >
<resultMap id="TestVOMap" type="com.umbrella.core.user_manage.model.TestVO">
<result column="number" property="number" javaType="String"/>
</resultMap>
<select id="queryTestVO" resultMap="TestVOMap">
SELECT number FROM testvo
</select>
</mapper>
----java的类及接口:
public class TestVO {
public String number;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
@Autowired
ITestDao iTestDao;
@PostConstruct
public void getTestVOList(){
List<TestVO> list = iTestDao.queryTestVO();
System.out.println();
}
----ddl:
CREATE TABLE `testvo` (
`number` bigint(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
核心就是:
<resultMap id="TestVOMap" type="com.umbrella.core.user_manage.model.TestVO">
<result column="number" property="number" javaType="String"/>
</resultMap>
背后的原理:

可以看到我们选了javaType是String类型,相应注册的类型Handler是String

点金getResult方法,我们找他的具体Handler实例,由上述克制我们要去StringTypeHandler。

相信写过自定义handler的小伙伴对这四个方法应该不陌生。

一步一步跟踪 - -

后续又经过getStringInternal内部的getString方法,这里看来主要是设置一些encoding
stringVal = this.thisRow.getString(internalColumnIndex, encoding, this.connection);

最终会调用getString方法,终于找到了目的地

经过toString方法的转换,

数据终于从BigInt类型转换成String

本文详细解析了MyBatis中如何通过xml配置将数据库的BigInt类型映射到Java的String类型,包括核心的resultMap配置、自定义Handler的使用方法及内部处理流程。
2325

被折叠的 条评论
为什么被折叠?



