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...