MyBatis中的selectKey
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
SelectKey在Mybatis中是為了解決Insert數(shù)據(jù)時不支持主鍵自動生成的問題,他可以很隨意的設置生成主鍵的方式。
不管SelectKey有多好,盡量不要遇到這種情況吧,畢竟很麻煩。
selectKey Attributes
屬性
描述
keyProperty
selectKey 語句結(jié)果應該被設置的目標屬性。
resultType
結(jié)果的類型。MyBatis 通常可以算出來,但是寫上也沒有問題。MyBatis 允許任何簡單類型用作主鍵的類型,包括字符串。
order
這可以被設置為 BEFORE 或 AFTER。如果設置為 BEFORE,那么它會首先選擇主鍵,設置 keyProperty 然后執(zhí)行插入語句。如果設置為 AFTER,那么先執(zhí)行插入語句,然后是 selectKey 元素-這和如 Oracle 數(shù)據(jù)庫相似,可以在插入語句中嵌入序列調(diào)用。
statementType
和前面的相 同,MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 語句的映射類型,分別代表 PreparedStatement 和CallableStatement 類型。
SelectKey需要注意order屬性,像Mysql一類支持自動增長類型的數(shù)據(jù)庫中,order需要設置為after才會取到正確的值。
像Oracle這樣取序列的情況,需要設置為before,否則會報錯。
另外在用Spring管理事務時,SelectKey和插入在同一事務當中,因而Mysql這樣的情況由于數(shù)據(jù)未插入到數(shù)據(jù)庫中,所以是得不到自動增長的Key。取消事務管理就不會有問題。
下面是一個xml和注解的例子,SelectKey很簡單,兩個例子就夠了:
[html] view plaincopy
上面xml的傳入?yún)?shù)是map,selectKey會將結(jié)果放到入?yún)?shù)map中。用POJO的情況一樣,但是有一點需要注意的是,keyProperty對應的字段在POJO中必須有相應的setter方法,setter的參數(shù)類型還要一致,否則會報錯。
[java] view plaincopy
上面是注解的形式。
在insert語句中,在Oracle經(jīng)常使用序列、在MySQL中使用函數(shù)來自動生成插入表的主鍵,而且需要方法能返回這個生成主鍵。使用myBatis的selectKey標簽可以實現(xiàn)這個效果。
下面例子,使用mysql數(shù)據(jù)庫自定義函數(shù)nextval('student'),用來生成一個key,并把他設置到傳入的實體類中的studentId屬性上。所以在執(zhí)行完此方法后,邊可以通過這個實體類獲取生成的key。
Xml代碼
調(diào)用接口方法,和獲取自動生成key
Java代碼
轉(zhuǎn)載于:https://my.oschina.net/u/1784135/blog/388905
總結(jié)
以上是生活随笔為你收集整理的MyBatis中的selectKey的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSP网站开发基础总结《六》
- 下一篇: Netty 高性能特性