MyBatis在Oracle中插入数据并返回主键的问题解决
?
前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
前言:我早期用過這個方法,但是返回的依舊是影響行數,不是主鍵。
只是這種寫法可以達到我要的效果:
用selectKey?,在insert 執行成功后,對象的ID屬性已經被 MyBatis 賦值了,可以直接對象.id 取到主鍵值。?
?
?
?
引言:? 在MyBatis中,希望在Oracle中插入數據之時,同時返回主鍵值,而非插入的條數...
環境:MyBatis 3.2 , Oracle, Spring 3.2
? SQL Snippet in XML Configuration:
[html]?view plain?copy?
要點是這里使用了selectKey來定義返回新生成的PrimaryKey,這個情況僅僅適用于Oracle。
?
需要注意的地方是在Java代碼中使用Integer類型,但是在MyBatis的映射文件中,使用java.math.BigDecimal類型,否則會報類型轉換或者不匹配的錯誤。
?
其他比如MySQL或者SQLServer的情況適用于以下情況:
?
[html]?view plain?copy使用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.
?
總結
以上是生活随笔為你收集整理的MyBatis在Oracle中插入数据并返回主键的问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 敏捷开发生态系统系列之五:关于敏捷生态系
- 下一篇: MySQL 实现树形的遍历(关于多级菜单