Mybatis 示例之 SelectKey

Mybatis 示例之 SelectKey

標籤: mybatisSelectKey
80841人閱讀 評論(11)收藏舉報
分類:
Mybatis(54)

SelectKey在Mybatis中是爲了解決Insert數據時不支持主鍵自動生成的問題,他可以很隨意的設置生成主鍵的方式。

不管SelectKey有多好,儘量不要遇到這種情況吧,畢竟很麻煩。


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


SelectKey需要注意order屬性,像MySQL一類支持自動增長類型的數據庫中,order需要設置爲after纔會取到正確的值。

Oracle這樣取序列的情況,需要設置爲before,否則會報錯。



下面是一個xml和註解的例子,SelectKey很簡單,兩個例子就夠了:

  1. <insert id="insert" parameterType="map">  
  2.     insert into table1 (name) values (#{name})  
  3.     <selectKey resultType="java.lang.Integer" keyProperty="id">  
  4.       CALL IDENTITY()  
  5.     </selectKey>  
  6.   </insert>  
<insert id="insert" parameterType="map">
    insert into table1 (name) values (#{name})
    <selectKey resultType="java.lang.Integer" keyProperty="id">
      CALL IDENTITY()
    </selectKey>
  </insert>

上面xml的傳入參數是map,selectKey會將結果放到入參數map中。用POJO的情況一樣,但是有一點需要注意的是,keyProperty對應的字段在POJO中必須有相應的setter方法,setter的參數類型還要一致,否則會報錯。


  1. @Insert("insert into table2 (name) values(#{name})")  
  2. @SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class)  
  3. int insertTable2(Name name);  
    @Insert("insert into table2 (name) values(#{name})")
    @SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class)
    int insertTable2(Name name);
上面是註解的形式。

31
1

猜你在找
機器學習之概率與統計推斷
機器學習之數學基礎
機器學習之凸優化
機器學習之矩陣
響應式佈局全新探索
探究Linux的總線、設備、驅動模型
深度學習基礎與TensorFlow實踐
深度學習之神經網絡原理與實戰技巧
前端開發在線峯會
TensorFlow實戰進階:手把手教你做圖像識別應用
查看評論
9樓 a10077636572017-03-14 16:22發表[回覆] [引用][舉報]
大神,我之前默認配置的是before確實不行,改了after就好了,但是後面您說spring加了事務管理,就不行了。我的項目裏也加了事務管理,依然可以啊,是我哪裏沒有理解到位嗎?
Re: isea5332017-03-14 21:33發表[回覆] [引用][舉報]
回覆a1007763657:謝謝提醒,你說的沒錯,文章內容有誤。已經去掉了。
8樓 a10077636572017-03-14 16:20發表[回覆] [引用][舉報]
大神,我之前默認配置的是before確實不行,改了after就好了,但是後面您說spring加了事務管理,就不行了。我的項目裏也加了事務管理,依然可以啊,是我哪裏沒有理解到位嗎?
7樓 luansp2016-12-16 16:10發表[回覆] [引用][舉報]
爲什麼配置了 insert的時候提示id不能爲null獲取沒有string類型的setter方法呢
6樓 luansp2016-12-16 16:03發表[回覆] [引用][舉報]
樓主 爲什麼我配置了selectkey獲取id插入的時候還是提示id不能爲null
Re: isea5332016-12-16 23:29發表[回覆] [引用][舉報]
回覆luansp:注意before和after
5樓 馬世超2016-11-08 19:21發表[回覆] [引用][舉報]
非常感謝分享。
4樓 Hello------world2016-04-11 15:08發表[回覆] [引用][舉報]
謝謝分享
3樓 joker07132016-03-16 11:43發表[回覆] [引用][舉報]
謝謝
2樓 閃小達2015-07-22 15:10發表[回覆] [引用][舉報]
mysql 是 SELECT LAST_INSERT_ID()
1樓 JavaCore12015-04-14 19:46發表[回覆] [引用][舉報]
3q分享
發表評論
  • 用 戶 名:
  • NewstarCSDN
  •   
* 以上用戶言論只代表其個人觀點,不代表CSDN網站的觀點或立場
快速回復TOP
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章