MyBatis中的selectKey使用介紹

2021-12-30 10:54:27 字數 1259 閱讀 7419

selectkey在mybatis中是為了解決insert資料時不支援主鍵自動生成的問題,他可以很隨意的設定生成主鍵的方式。

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

selectkey attributes

屬性描述

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,否則會報錯。

另外在用spring管理事務時,selectkey和插入在同一事務當中,因而mysql這樣的情況由於資料未插入到資料庫中,所以是得不到自動增長的key。取消事務管理就不會有問題。

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

insert into table1 (name) values (#)

call identity()

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

@insert("insert into table2 (name) values(#)")

@selectkey(statement="call identity()", keyproperty="nameid", before=false, resulttype=int.class)

int inserttable2(name name);上面是註解的形式。

MyBatis中select條件配置

id getcashinvoicebyquery parametertype com.dfire.soa.invoice.query.cashinvoicequery resultmap cashinvoicemap select from cash print where test null en...

Mybatis 使用 select 模糊查詢

有時候我們寫簡單的sql不想使用xml裡面寫。所以我們可能直接乙個註解搞定。但是用常規的寫法有點問題,報錯。所以我們這麼寫。select select id,banner context,banner img src,banner create time,banner is use from sys...

併發中的select

select語句不使用default分支時,處於阻塞狀態直到其中乙個channel的收 發操作準備就緒 或者channel關閉或者緩衝區有值 如果同時有多個channel的收 發操作準備就緒 或者channel關閉 則隨機選擇其中乙個。select語句使用default分支時,處於非阻塞狀態,從所有...