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.
相關文章
- Java MyBatis 插入資料庫返回主鍵JavaMyBatis資料庫
- Mybatis:插入資料返回自增主鍵MyBatis
- MyBatis + MySQL返回插入成功後的主鍵idMyBatisMySql
- Java書籤 #MyBatis之批量插入並返回自增主鍵idJavaMyBatis
- mybatis oracle資料庫批次插入資料,忽略主鍵重複MyBatisOracle資料庫
- MyBatis insert操作插入,返回主鍵from官方MyBatis
- myBatis插入oracle獲取主鍵MyBatisOracle
- 解決hive資料庫 插入資料很慢的問題Hive資料庫
- 向Mysql主鍵自增長表中新增資料並返回主鍵MySql
- 向資料庫中插入一條新的資料,並返回新增資料的ID資料庫
- myeclispe中向mysql中插入中文資料出現??問題解決辦法LispMySql
- mybatis插入資料、批量插入資料MyBatis
- 解決mybatis用Map返回的欄位全變大寫的問題MyBatis
- 解決Oracle中Exp/Imp大量資料處理問題Oracle
- 在PHP中怎麼解決大量資料處理的問題PHP
- 資料插入問題。
- mybatis入門程式:向資料庫中新增使用者&&自增主鍵和非自增主鍵的返回MyBatis資料庫
- 解決pl/sql developer中資料庫插入資料亂碼問題SQLDeveloper資料庫
- 解決Mysql資料庫插入資料出現問號(?)的解決辦法MySql資料庫
- 注意:Oracle中的聯合主鍵查詢問題(轉)Oracle
- MySQL 主鍵衝突,無法插入資料MySql
- MyBatis 批量插入資料MyBatis
- JDBC 獲取被插入資料的主鍵ID值JDBC
- 批量插入資料時主鍵衝突的處理
- 解決Hibernate向MySQL資料庫插入中文亂碼問題MySql資料庫
- 在linux中安裝mysql並解決中文亂碼問題LinuxMySql
- Oracle並行新增主鍵Oracle並行
- Oracle主鍵選擇對插入的影響Oracle
- 在Oracle網路結構中解決連線問題Oracle
- 解決oracle中not like效率問題Oracle
- oracle 資料庫解決問題思路總結Oracle資料庫
- 在Oracle的網路結構中解決連線問題(轉)Oracle
- 請教資料的返回問題
- 資料庫自增主鍵可能產生的問題資料庫
- 靈活運用分散式鎖解決資料重複插入問題分散式
- mybatis中resultMap使用之返回分組資料MyBatis
- 解決Spring中ResponseBody返回中文亂碼問題Spring
- mybatis+oracle 批次插入多條資料的處理方法MyBatisOracle