MyBatis insert操作插入,返回主鍵from官方


下面就是 insert,update 和 delete 語句的示例:

<insert id="insertAuthor" parameterType="domain.blog.Author">
  insert into Author (id,username,password,email,bio)
  values (#{id},#{username},#{password},#{email},#{bio})
</insert>

  

如前所述,插入語句有一點多,它有一些屬性和子元素用來處理主鍵的生成。

首先,如果你的數據庫支持自動生成主鍵的字段(比如 MySQL 和 SQL Server) ,那么 你可以設置 useGeneratedKeys=”true”,而且設置 keyProperty 到你已經做好的目標屬性上。 例如,如果上面的 Author 表已經對 id 使用了自動生成的列類型,那么語句可以修改為:

<insert id="insertAuthor" parameterType="domain.blog.Author" useGeneratedKeys="true"
    keyProperty="id">
  insert into Author (username,password,email,bio)
  values (#{username},#{password},#{email},#{bio})
</insert>

  

MyBatis 有另外一種方法來處理數據庫不支持自動生成類型,或者可能 JDBC 驅動不支 持自動生成主鍵時的主鍵生成問題。

這里有一個簡單(甚至很傻)的示例,它可以生成一個隨機 ID(可能你不會這么做, 但是這展示了 MyBatis 處理問題的靈活性,因為它並不真的關心 ID 的生成):

<insert id="insertAuthor" parameterType="domain.blog.Author">
  <selectKey keyProperty="id" resultType="int" order="BEFORE">
    select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
  </selectKey>
  insert into Author
    (id, username, password, email,bio, favourite_section)
  values
    (#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
</insert>

PS:以上selectKey里你可以修改為其它的主鍵生成方式如

SELECT user_info$seq.NEXTVAL FROM DUAL

在上面的示例中,selectKey 元素將會首先運行,Author 的 id 會被設置,然后插入語句 會被調用。 這給你了一個簡單的行為在你的數據庫中來處理自動生成的主鍵, 而不需要使你 的 Java 代碼變得復雜。

selectKey 元素描述如下:

<selectKey
  keyProperty="id"
  resultType="int"
  order="BEFORE"
  statementType="PREPARED">
屬性 描述
keyProperty selectKey 語句結果應該被設置的目標屬性。
resultType 結果的類型。MyBatis 通常可以算出來,但是寫上也沒有問題。 MyBatis 允許任何簡單類型用作主鍵的類型,包括字符串。
order 這可以被設置為 BEFORE 或 AFTER。如果設置為 BEFORE,那 么它會首先選擇主鍵, 設置 keyProperty 然后執行插入語句。 如果 設置為 AFTER,那么先執行插入語句,然后是 selectKey 元素- 這和如 Oracle 數據庫相似,可以在插入語句中嵌入序列調用。
statementType 和前面的相 同,MyBatis 支持 STA TEMENT ,PREPARED 和 CALLABLE 語句的映射類型,分別代表 PreparedStatement 和 CallableStatement 類型。

 

   


免責聲明!

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



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