分類:
Mybatis(54)
版權聲明:版權歸博主所有,轉載請帶上本文鏈接!聯繫方式:[email protected]
SelectKey在Mybatis中是爲了解決Insert數據時不支持主鍵自動生成的問題,他可以很隨意的設置生成主鍵的方式。
不管SelectKey有多好,儘量不要遇到這種情況吧,畢竟很麻煩。
屬性 | 描述 |
---|---|
keyProperty | selectKey 語句結果應該被設置的目標屬性。 |
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很簡單,兩個例子就夠了:
- <insert id="insert" parameterType="map">
- insert into table1 (name) values (#{name})
- <selectKey resultType="java.lang.Integer" keyProperty="id">
- CALL IDENTITY()
- </selectKey>
- </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的參數類型還要一致,否則會報錯。
- @Insert("insert into table2 (name) values(#{name})")
- @SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class)
- 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
- 評論內容:
- HTML/XMLobjective-cDelphiRubyPHPC#C++JavaScriptVisual BasicPythonJavaCSSSQL其它
* 以上用戶言論只代表其個人觀點,不代表CSDN網站的觀點或立場