mybatis進行插入操作時,如果表的主鍵是自增的,針對不同的資料庫相應的操作也不同。基本上經常會遇到的就是 oracle sequece 和 mysql 自增主鍵,至於其他的手動生成唯一主鍵的問題在這裡就不討論了,這裡主要說明下在mybatis中對於自增主鍵的配置。
不返回自增主鍵值
如果考慮到插入資料的主鍵不作為其他表插入資料的外來鍵使用,那麼可以考慮使用這種方式。
oracle sequence 配置
test_user
seq_test_user_id.nextval
insert into (id,name,age)
values ( ,#, # )
當插入語句如上配置時,那麼針對如下語句
user.id為空,也就是說如上的配置並不能在完成插入操作後將插入時的主鍵值存放到儲存的物件中。
mysql自增主鍵配置
由於mysql資料庫中,可以設定表的主鍵為自增,所以對於mysql資料庫在mybatis配置插入語句時,不指定插入id欄位即可。主鍵的自增交由mysql來管理。
test_user
insert into (name,age)
values (#, # )
同樣,針對mysql如此配置mybaits,插入完成後user.id為空。
插入後獲取自增主鍵值
上述的情況能滿足大部分情況,但有時候我們會遇到類似一對多的那種表結構,在插入多端資料時,需要獲取剛剛儲存了的一段的主鍵。那麼這個時候,上述的配置就無法滿足需要了。為此我們需要使用mybatis提供的來單獨配置針對自增逐漸的處理。
oracle sequence 配置
test_user
seq_test_user_id.nextval
select from dual
insert into (id,name,age)
values ( #, #, # )
當使用了後,在實際的插入操作時,mybatis會執行以下兩句sql:
select seq_test_user_id.nextval from dual; // 語句1
insert into (id,name,age) values ( ?, ?, ? ); // 語句2
在執行插入 語句2 之前,會先執行 語句1 以獲取當前的id值,然後mybatis使用反射呼叫user物件的setid方法,將 語句1 查詢出的值儲存在user物件中,然後才執行 語句2 這樣就保證了執行完插入後
user.id是有值的。
mysql自增主鍵配置
針對於mysql這種自己維護主鍵的資料庫,可以直接使用以下配置在插入後獲取插入主鍵,
test_user
insert into ( name, age )
values ( #, # )
當然,由於mysql的自增主鍵可以通過sql語句
select last_insert_id();
來獲取的。因此針對mysql,mybatis也可配置如下:
test_user
select last_insert_id()
insert into (id,name,age)
values ( #, #, # )
只不過該中配置需要額外的一條查詢sql!
小結當資料插入操作不關心插入後資料的主鍵(唯一標識),那麼建議使用 不返回自增主鍵值 的方式來配置插入語句,這樣可以避免額外的sql開銷.
當執行插入操作後需要立即獲取插入的自增主鍵值,比如一次操作中儲存一對多這種關係的資料,那麼就要使用 插入後獲取自增主鍵值 的方式配置.
mybatis自增主鍵配置
mybatis進行插入操作時,如果表的主鍵是自增的,針對不同的資料庫相應的操作也不同。基本上經常會遇到的就是 oracle sequece 和 mysql 自增主鍵,至於其他的手動生成唯一主鍵的問題在這裡就不討論了,這裡主要說明下在mybatis中對於自增主鍵的配置。如果考慮到插入資料的主鍵不作為其...
mybatis自增主鍵配置
url mybatis進行插入操作時,如果表的主鍵是自增的,針對不同的資料庫相應的操作也不同。基本上經常會遇到的就是 oracle sequece 和 mysql 自增主鍵,至於其他的手動生成唯一主鍵的問題在這裡就不討論了,這裡主要說明下在mybatis中對於自增主鍵的配置。size x large...
mybatis配置oracle的主鍵自增長
mysql sqlserver等資料庫本身帶有主鍵自增長像auto increment的功能可以直接使用 usegeneratedkeys true 來實現,比如下面的配置 id add usegeneratedkeys true keyproperty id parametertype auth ...