MyBatis中bigint数据查询后转成java对应的String 以及背后mybatis的处理流程概览

简单实现:

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

猜你喜欢

转载自blog.csdn.net/qq_31615049/article/details/86498827