用selectKey返回insert後產生的新行的主鍵

iBATIS SQL Maps 通過 <insert> 元素的子元素 < selectKey> 來支持主鍵自動生成。 resultClass="java.lang.Integer" 定義返回對象爲 int 的 Wrapper Class。keyProperty="id" 定義了主鍵名稱。本例是 MySQL 主鍵生成方式,參考官方文檔,MySQL 的主鍵生成無需人爲來控制,也就是說可不使用 <selectKey> 而由數據庫自動處理。但我測試發現,在執行 insert 操作以後,程序沒有返回本次操作插入記錄的主鍵值。在官方論壇上也有很多用戶提出這樣的疑惑,作者的答覆是:這和 JDBC Driver 有關係。不可能把驅動一一測試吧?一勞永逸的辦法是使用 <selectKey> 元素。以下是 Oracle 和 SQL Server 主鍵生成方法:

< !- Oracle ->
<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">
  <selectKey resultClass="int" keyProperty="id" >
    SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL
  </selectKey>
  insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values (#id#,#description#)
</insert>

<!- Microsoft SQL Server ->
<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">
  insert into PRODUCT (PRD_DESCRIPTION) values (#description#)
  <selectKey resultClass="int" keyProperty="id" >
  SELECT @@IDENTITY AS ID
  </selectKey>
</insert>

   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章