Mybatis无效的列类型1111

写了一套mybatis配置文件自动生成框架,图方便就没写jdbctype,结果运行的时候抛出了这个异常:

Cause: java.sql.SQLException: 无效的列类型: 1111

在网上搜了搜,加上jdbcType就行了。

解决问题时主要的困惑点在于1111是哪来的,刚开始以为是项目硬编码进了这个数字,还搜索了半天。看了看mybatis的源代码,好像是在没有执行jdbcType的时候,最终会将某个变量设置为1111。不清楚框架为什么要这么设计,估计是个未完成的功能或者bug。

Oracle序列环境下Mybatis insert失败时id依然有值

为了在insert之后model类能获取到oracle自动生成的序列值,一般都是这样的配置方法:

[xml]

<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Long">
SELECT XXX_SEQ.NEXTVAL FROM DUAL
</selectKey>

[/xml]

读取序列nextval的执行顺序在insert之前,所以神奇的事情发生了:insert失败,但model类的主键有值,在数据库中居然还查不到这个id!
这个故事告诉我们:一定要做好异常处理。