MyBatis在Oracle中插入資料並返回主鍵的問題解決
引言: 在MyBatis中,希望在Oracle中插入資料之時,同時返回主鍵值,而非插入的條數...
環境:MyBatis 3.2 , Oracle, Spring 3.2
SQL Snippet in XML Configuration:
<insert id="insertSelective" parameterType="com.jxxx.p2pp.model.UUserInfo">
<selectKey resultType="java.math.BigDecimal" order="BEFORE" keyProperty="id">
SELECT U_USER_INFO_SEQ.Nextval as ID from DUAL
</selectKey>
insert into U_USER_INFO
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
ID,
</if>
<if test="userName != null" >
USER_NAME,
</if>
<if test="realName != null" >
REAL_NAME,
</if>
.....
</insert>
要點是這裡使用了selectKey來定義返回新生成的PrimaryKey,這個情況僅僅適用於Oracle。
需要注意的地方是在Java程式碼中使用Integer型別,但是在MyBatis的對映檔案中,使用java.math.BigDecimal型別,否則會報型別轉換或者不匹配的錯誤。
其他比如MySQL或者SQLServer的情況適用於以下情況:
<insert id="insert" parameterType="Spares"
useGeneratedKeys="true" keyProperty="id">
insert into spares(spares_id,spares_name,
spares_type_id,spares_spec)
values(#{id},#{name},#{typeId},#{spec})
</insert>
使用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:插入資料返回自增主鍵MyBatis
- Java MyBatis 插入資料庫返回主鍵JavaMyBatis資料庫
- mybatis oracle資料庫批次插入資料,忽略主鍵重複MyBatisOracle資料庫
- Java書籤 #MyBatis之批量插入並返回自增主鍵idJavaMyBatis
- 解決hive資料庫 插入資料很慢的問題Hive資料庫
- 向Mysql主鍵自增長表中新增資料並返回主鍵MySql
- 解決pl/sql developer中資料庫插入資料亂碼問題SQLDeveloper資料庫
- 向資料庫中插入一條新的資料,並返回新增資料的ID資料庫
- mybatis插入資料、批量插入資料MyBatis
- 解決mybatis用Map返回的欄位全變大寫的問題MyBatis
- 解決Mysql資料庫插入資料出現問號(?)的解決辦法MySql資料庫
- mybatis入門程式:向資料庫中新增使用者&&自增主鍵和非自增主鍵的返回MyBatis資料庫
- mybatis+oracle 批次插入多條資料的處理方法MyBatisOracle
- mybatis 批次插入資料MyBatis
- Java通過Mybatis實現批量插入資料到Oracle中JavaMyBatisOracle
- oracle 序列值導致的主鍵衝突問題Oracle
- 靈活運用分散式鎖解決資料重複插入問題分散式
- MyBatis中批量插入資料,多重forEach迴圈MyBatis
- 從鍵盤鍵入String型別的資料插入資料庫中型別資料庫
- 解決AI的小資料問題AI
- oracle和mybatis整合,批次插入OracleMyBatis
- 解決idea中無法識別主類的問題Idea
- mysql8.0插入慢的問題解決方案(一)MySql
- Jison解決JS處理後端返回的Long型資料精度丟失問題JS後端
- Firedac 在資料表中插入BLOB資料的方法
- Mybatis入門 Mybatis存在的意義 解決的問題 基本操作MyBatis
- MySQL主從資料庫同步延遲問題怎麼解決MySql資料庫
- 一次 nginx 返回 302 問題解決Nginx
- 解決在Windows 11下Visual Studio部分快捷鍵失效的問題Windows
- Java介面返回JSON排序無需的問題解決JavaJSON排序
- 在Linux中,ansible可以解決哪些問題?Linux
- 在CSS中解決內容過長的問題CSS
- Laravel 集合 where 返回的資料格式問題Laravel
- Oracle資料不同步的問題分析和解決思路Oracle
- laravel 批次插入並在遇到重複鍵時更新Laravel
- 自增長主鍵回顯實現,批次資料插入
- macOS 無法sudo建立資料夾返回Read-only file system問題解決Mac
- Oracle 解決like中無法匹配下劃線的問題Oracle
- JDBC Oracle executeUpdate 卡死問題解決JDBCOracle