mybatis新增返回主鍵

2021-09-25 07:10:29 字數 2139 閱讀 4679

在一些管理系統專案中,對於一些特殊的業務必須要進行返回主鍵id,那麼在mybatis框架中是如何返回主鍵id的呢?mybatis提供了不少操作sql語句的標籤,其中包括了新增的標籤,其返回與主鍵相關屬性也是該標籤提供的,與返回主鍵相關的屬性如下:

屬性描述

keyproperty

(僅對insert和update有用)此屬性的作用是將插入或更新操作時的返回值賦值給po類的某個屬性,通常會設定為主鍵對應的屬性。 如果需要設定聯主鍵,可以在多個值之間用逗號隔開

keycolumn

(僅對insert和update有用)此屬性用於設定第幾列是主鍵,當主鍵列不是表中的第一列時需要設定。在需要主鍵聯合時,值可以用逗號隔開

usegeneratedkeys

(僅對insert葉和update有用)此屬性會使mybatis使用jdbc的getgeneratedkeys()方法來獲取由資料庫內部生產的主鍵,如mysql相sqlserver等自動遞增的字段,其預設值為false

執行插入操作後,很多時候我們會需要返回插入成功的資料生成的主鍵值,此時就可以通過上面所講解的3個屬性來實現。如果使用的資料庫支援主鍵自動增長(如mysql),那麼可以通過keyproperty 屬性指定pojo類的某個屬性接收主鍵返回值( 通常會設定到id 屬性上),然後將usegeneratedkeys的屬

性值設定為true, 其使用示例如下。

在相關對映檔案中新增一條sql語句,其中在標籤中新增keyproperty屬性和usegeneratekeys屬性:

"addrolelist"

parametertype

="urole"

keyproperty

="id"

usegeneratedkeys

="true"

>

insert into

u_role(name,type)values (#,#)

insert

>

在測試**中測試是否成功返回主鍵:

public resultinfo addrolelist

(urole urole)

throws customexception

catch

(exception e)

return resultinfo.

setresultinfo

(true

,"新增成功");

如果使用的資料庫不支援主鍵自動增長(如oracle),或者支援增長的資料庫取消了主鍵自增的規則時,也可以使用mybatis提供的另一種方式來自定義生成主鍵,具體配置示例如下。

"addrolelist"

parametertype

="urole"

>

keyproperty

="id"

keycolumn

="id"

resulttype

="long"

order

="before"

>

select if(max(id) is null,1,max(id)+1)as id from u_role

selectkey

>

insert into

u_role(id,name,type)values (#,#,#)

insert

>

在執行上述示例**時,元素會首先執行,它會通過自定義的語句來設定資料表中的主鍵(如果u_role表中沒有記錄,則將id設定為1 ,否則就將id 的最大值加1 ,來作為新的主鍵),然後再呼叫插入語句。

在上述元素的幾個屬性中,keyproperty屬性為返回主鍵到哪個列, order屬性可以被設定為before或after。 如果設定為before,那麼它會首先執行元素中的配置來設定主鍵,然後執行插入語句;如果設定為after,那麼它會先執行插入語句,然後執行元素中的配置內容。

Mybatis新增記錄,返回主鍵id

1 新增記錄能夠返回主鍵的關鍵點在於需要在標籤中新增以下三個屬性。usegeneratedkeys 必須設定為true,否則無法獲取到主鍵id。keyproperty 設定為pojo物件的主鍵id屬性名稱。keycolumn 設定為資料庫記錄的主鍵id欄位名稱 2 新新增主鍵id並不是在執行新增操作...

mybatis 主鍵返回

1.需求 在插入一條資料的時候返回插入資料的主鍵 2.兩種實現方式 1.如果資料庫沒有配置自動增長,適用於下面這種方法 keyproperty id 表明主鍵是哪個字段 usegeneratedkeys true 設定主鍵為自增長 2.如果我們資料庫設定了主鍵自動增長,我們適合採用這種方法 inse...

MyBatis返回主鍵

select last insert id insert into company lease info name,code,business licence,oper name,oper phone,card no,province code,province name,city code,cit...