MyBatis在Oracle中插入数据并返回主键的问题解决

MyBatis在Oracle中插入数据并返回主键的问题解决

引言:  在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数...

环境:MyBatis 3.2 , Oracle。 Spring 3.2

  SQL Snippet in XML Configuration:


要点是这里使用了selectKey来定义返回新生成的PrimaryKey,这个情况只适用于Oracle。

须要注意的地方是在Java代码中使用Integer类型。可是在MyBatis的映射文件里。使用java.math.BigDecimal类型,否则会报类型转换或者不匹配的错误。

其它比方MySQL或者SQLServer的情况适用于下面情况:

使用useGeneratedKeys/KeyProperty来实现插入数据的时候,来完毕新生成主键的返回。


当中异常信息的解决:

异常信息:

   org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: java.sql.SQLException: 无效的列类型: getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor
; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 无效的列类型: getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor; nested exception is java.sql.SQLException:
无效的列类型: getBigDecimal not implemented for class oracle.jdbc.driver.T4CRowidAccessor


问题解决:

    问题是在Java代码中设置返回的主键数据类型,当中返回的数据类型为java.lang.Integer,而非BigDecimal和Long. 可是在MyBatis中的映射文件里的类型为java.math.BigDecimal.