Oracle中获取刚刚插入记录的主键值:
SELECT U_USER_INFO_SEQ.Nextval as ID from DUAL
insert into U_USER_INFO
ID,
USER_NAME,
REAL_NAME,
.....
要点是这里使用了selectKey来定义返回新生成的PrimaryKey,这个状况仅仅适用于Oracle。java
须要注意的地方是在Java代码中使用Integer类型,可是在MyBatis的映射文件中,使用java.math.BigDecimal类型,不然会报类型转换或者不匹配的错误。spring
MySQL与SQL Server获取刚刚插入数据的主键值:
useGeneratedKeys="true" keyProperty="id">
insert into spares(spares_id,spares_name,
spares_type_id,spares_spec)
values(#{id},#{name},#{typeId},#{spec})
使用useGeneratedKeys/KeyProperty来实现插入数据的时候,来完成新生成主键的返回。sql
其中异常信息的解决:oracle
异常信息:ide
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.T4CRowidAccessorspa
问题解决:.net
问题是在Java代码中设置返回的主键数据类型,其中返回的数据类型为java.lang.Integer,而非BigDecimal和Long. 可是在MyBatis中的映射文件中的类型为java.math.BigDecimal.code