詳談Mybatis中插入資料時注入主鍵值的幾種方法

2021-09-24 01:27:37 字數 2042 閱讀 1832

在我們使用mybatis的過程中,在表中插入某條資料時,通常會傳入乙個實體類

例如:

@insert

("insert into emp (empno,ename,job) values (#,#,#)"

)int

insert

(emp emp)

;

​ 但這個實體類的主鍵字段(這裡為empno)在mysql中通常都是設定為自動增長的,通常我們會在插入時給emp物件的主鍵屬性賦值為null,讓資料庫自動生成empno。但這樣做有個問題,當我們插入資料後,要直接從emp物件中獲取插入資料的主鍵值,它依然為null,影響某些特定的功能需求。

哪麼如何在插入資料的同時,直接把主鍵值賦值給emp物件呢

mysql等有自動增長主鍵列的資料庫中有以下做法:

註解版

@options

(usegeneratedkeys=

true

,keyproperty=

"empno"

,keycolumn=

"empno"

)@insert

("insert into emp (empno,ename,job) values (#,#,#)"

)int

insert

(emp emp)

;

usegeneratedkeys=true:是否使用自增主鍵

keycolumn:表中主鍵列名

keyproperty:實體類中主鍵屬性名

xml版
"insert1"

keycolumn

="empno"

keyproperty

="empno"

usegeneratedkeys

="true"

>

insert into emp (empno,ename,job) values (#,#,#)

insert

>

通過以上方式就可以獲取到empno的屬性了

insert

(emp)

;system.out.

println

(emp.

getempno()

)//11243

然而在oracle資料庫中是沒有自增列的,這裡就要用到另乙個標籤:

selectkey

"insert1"

>

keycolumn

="empno"

keyproperty

="empno"

order

="before"

resulttype

="int"

>

select 8000

selectkey

>

insert into emp (empno,ename,job) values (#,#,#)

insert

>

selectkey中寫你要執行的查詢,可以查詢序列值也可以自定義主鍵值

它前兩個屬性和上述是一樣的,最後乙個屬性指定了主鍵的資料型別,比較特別的是order這個屬性

order:這可以被設定為 before 或 after。如果設定為 before,那麼它會首先選擇主鍵,設定 keyproperty 然後執行插入語句。如果設定為 after,那麼先執行插入語句,然後是 selectkey 元素-這和如 oracle 資料庫相似,可以在插入語句中嵌入序列呼叫。

也就是說,有自動增長列的資料庫可以執行插入前獲取要插入資料的主鍵值,其的資料庫要插入後再執行selectkey獲取主鍵值並注入實體類,所以一般在mysql中用before,oracle中用after

Mybatis 插入資料時返回主鍵的方法

mysql插入資料後獲得主鍵 針對自增主鍵的表,在插入時不需要主鍵,而是在插入過程自動獲取乙個自增的主鍵,比如mysql,add parametertype vo.category usegeneratedkeys true keyproperty id insert into category n...

MyBatis批量插入資料

在程式中封裝了乙個list集合物件,然後需要把該集合中的實體插入到資料庫中,由於專案使用了spring mybatis的配置,所以打算使用mybatis批量插入,由於之前沒用過批量插入,在網上找了一些資料後最終實現了,把詳細過程貼出來 實體類trainrecord結構如下 public class ...

mybatis批量插入資料

有三種方式 裡面for迴圈 略mybatis batch模式插入 略對映檔案foreach方式插入 在對映檔案中使用 標籤 傳入引數為該物件的list集合 insert into auth role resource id,roleid,resourceid,createtime,updatetim...