MyBatis主鍵回填和自定義主鍵

2021-10-21 13:27:23 字數 1609 閱讀 9465

1. 主鍵回填

jdbc中的statement物件在執行插入的sql後,可以通過getgeneratedkeys方法獲得資料庫生成的主鍵,這樣便能達到獲取主鍵的功能。在insert語句中,有乙個開關屬性:usegeneratedkeys,用來控制是否開啟這個功能,它的預設值是false。當開啟了這個開關,還需要配置其屬性:keyproperty或keycolumn,告訴系統把生成的主鍵放到pojo的哪個屬性中。如果存在多個主鍵,就使用逗號隔開。

**清單:讓程式返回主鍵,並將主鍵封裝到pojo的id屬性中。

"insertuser"

parametertype

="user"

usegeneratedkeys

="true"

keyproperty

="id"

>

insert into user(id,username,birthday,***,address)values(#,#,#,#,#)

insert

>

即:開啟了usegeneratedkeys屬性,並配置了keyproperty=「id」,意思是將返回的id封裝到user物件的id屬性中。

這樣,拿到了這個id主鍵值,就可以在業務**中執行下一步的關聯和操作了。

2. 自定義主鍵

在執行插入語句時,可以自定義主鍵生成規則。

實驗要求:

當角色表記錄為空時,id設定為1.

當角色表記錄不為空時,id設定為當前id加2.

mybatis對這樣的場景提供了支援,它主要依賴於selectkey元素進行支援,它允許自定義鍵值的生成規則。下面使用**完成自定義主鍵的規則要求。

"insertbyself"

parametertype

="user"

usegeneratedkeys

="true"

>

keyproperty

="id"

resulttype

="integer"

order

="before"

>

select if(max(id) = null ,1,max(id)+2) from user

selectkey

>

insert into user(id,username,birthday,***,address)values(#,#,#,#,#)

insert

>

**解析:

測試:– 第一次插入

@test

public

void

testinsertbyself()

– 第二次插入

@test

public

void

testinsertbyself()

即:通過自定義主鍵生成策略完成了id的生成。

mybatis中自定義主鍵規則

有些時候註解可能依賴某些規則,比如取消user表的遞增規則,而將其規則改為 當使用者表為空時,id設定為1 當使用者表不為空時,id設定為當前最大id加3 mybatis對這樣的場景也提供了支援,它主要依賴於selectkey元素 select if max id null,1,max id 3 f...

Hibernate 自定義主鍵

hibernate 自帶主鍵生成功能,當然也可以自定義生成主鍵 hibernate 自定義生成主鍵主要要實現 org.hibernate.id.identifiergenerator介面。之後便是書寫 public class usergenerator implements identifierg...

mybatis 自定義TypeHandler 的坑

1 場景 2 坑 自定義之後也無效的問題 3 講解 basetypehandler implements typehandler 通過getresult方法呼叫實際介面,模板模式 4 typehandler的型別,處理什麼型別的資料 public class emptystringifnull ex...