Mybatis 獲得自動生成主鍵值


介紹

對於某些特殊需求:得到剛剛插入數據的主鍵值,以便對剛剛生成的數據做處理 
那么,如何得到剛插入的主鍵值呢有兩種大的方向。 
第一是在數據庫獲得通過自帶方法。在數據插入之后輸入“select @@indentity”通常需要結合存儲過程,比較復雜。 
第二是在后台插入時獲得。這里我們主要說后台剛插入時得到主鍵值。

詳細

后台數據插入時獲得主鍵值也分為兩種情況:支持主鍵自增數據庫和不支持主鍵自增。 
一、對於支持自動生成主鍵的數據庫,如Mysql、sqlServer,可以通過 Mybatis元素useGeneratedKeys返回當前插入數據主鍵值到輸入類中。

具體應用

<insert id="insertTest" useGeneratedKeys="true" keyProperty="id"  parameterType="com.kq.domain.IdentityTest"> insert into identity_test(name) values(#{name,jdbcType=VARCHAR}) </insert>
  • 1
  • 2
  • 3
  • 4
  • 5

當執行此條插入語句以后,實體類IdentityTest中的Id會被當前插入數據的主鍵自動填充。

二、對於不支持自動生成主鍵的數據庫。Oracle、DB2等,可以用元素selectKey 回當前插入數據主鍵值到輸入類中。(同時生成一個自定義的隨機主鍵)

具體應用

<insert id="insertTest" useGeneratedKeys="true" keyProperty="id"  parameterType="com.kq.domain.IdentityTest">  <selectKey keyProperty="id" resultType="String" order="BEFORE"> SELECT REPLACE(UUID(),'-','') </selectKey> insert into identity_test(name) values(#{name,jdbcType=VARCHAR}) </insert>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

當執行此條插入語句以后,實體類IdentityTest中的Id也會被當前插入數據的主鍵自動填充。

補充

selectKey 元素描述:

屬性 描述
keyProperty selectKey 語句結果應該被設置的目標屬性。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。
keyColumn 匹配屬性的返回結果集中的列名稱。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。
resultType 結果的類型。MyBatis 通常可以推算出來,但是為了更加確定寫上也不會有什么問題。MyBatis 允許任何簡單類型用作主鍵的類型,包括字符串。如果希望作用於多個生成的列,則可以使用一個包含期望屬性的 Object 或一個 Map。
order 這可以被設置為 BEFORE 或 AFTER。如果設置為 BEFORE,那么它會首先選擇主鍵,設置 keyProperty 然后執行插入語句。如果設置為 AFTER,那么先執行插入語句,然后是 selectKey 元素 - 這和像 Oracle 的數據庫相似,在插入語句內部可能有嵌入索引調用。
statementType MyBatis 支持 STATEMENT,PREPARED 和 CALLABLE 語句的映射類型,分別代表 PreparedStatement 和 CallableStatement 類型。
 
  •  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM