日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
  • <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的情況適用于以下情況:

    ?

    [html]?view plain?copy
  • <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在Oracle中插入数据并返回主键的问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。