mybatis jdbcTyp和javaType的类型处理
前一个版本,要变更活动的一个表字段,从int型改为varchar。有点疑问如果先执行数据库脚本,后发版,会不会有问题?本地debug 了一下mybatis执行流程确认了一下。发现不是mybatis做了判断,而是JDBC做了这些脏活累活儿。
下面的图片是mysql执行sql的调用栈信息:
- mybatis通过TypeHandlerRegistry,因为java类是Integer,所以会取到IntegerTypeHandler
- IntegerTypeHandler调用了jdbc包中的 ResultSetImpl.getInt.
- 最终调用了StringUtils.getInt方法。这个方法对字符串的各种场景(带特殊符号,带英文字母,超出MAX_VALUE)做了判断。