執行insert的基礎是先插入資料,而插入資料依賴於insert語句。先來看看insert語句的設定:
parametertype:可以給出類的全命名,也可以給出別名,但是別名必須是mybatis內部定義或者自定義的。
flushcache:是否重新整理快取,可以配置true/false,為true時,插入時會重新整理一級快取和二級快取,否則不重新整理。
timeout:超時時間,單位為秒。
usegeneratedkeys:是否啟用jdbc的getgeneratedkeys方法來取出資料庫內部生成的主鍵。
keyproperty:唯一標識的屬性,mybatis會通過getgeneratedkeys的返回值,或者通過insert語句的selectkey子元素設定它的鍵值。
keycolumn:通過生成的鍵值設定表中的列名。
mybatis在執行完一條insert語句後,會返回乙個整數表示其影響的紀錄行。
寫一條sql插入語句,這是一條最簡單的插入語句,**如下:
"insertrole" parametertype=
"role"
>
insert into role
(role_name,note) values (#,#)
<
/insert>
分析一下這段**:
沒有配置的屬性將採用預設值,這樣就完成了乙個角色的插入。
主鍵回填
上述**展示了最簡單的插入語句,但是它並沒有插入id列,因為mysql中的**採用了自增主鍵,mysql資料庫會為該記錄生成對應的主鍵。有時候還可能需要繼續使用這個主鍵,用以關聯其他事務,因此有時候把它取到是十分有必要的。
jdbc中的statement物件在執行插入的sql後,可以通過getgeneratedkeys方法獲取資料生成的主鍵,這樣便能達到獲取之間的功能。在insert語句中有乙個開關屬性usegeneratedkeys,用來控制是否開啟這個功能,它的預設值是false。當開啟了這個開關後,還要配置其屬性keyproperty或者keycolumn,告訴系統把生成的主鍵放入哪個屬性中,如果存在多個主鍵,就要用(,)隔開。
於是我們對**進行了修改,**如下:
"insertrole" parametertype=
"role"
usegeneratedkeys=
"true" keyproperty=
"id"
>
insert into role
(role_name,note) values (#,#)
<
/insert>
自定義主鍵
有時候逐漸可能依賴於某些規則,比如取消角色表(role)的id的自增規則,而將其規則修改為:
mybatis對這樣的場景也提供了支援,他主要依賴於selectkry元素進行支援,它允許自定義鍵值的生成規則。**如下:
"insertrole" parametertype=
"role"
>
"id" resulttype=
"long" order=
"before"
>
select if
(max
(id)
==null,1,
max(id)+2
) from role
<
/selectkey>
insert into role
(role_name,note) values (#,#)
<
/insert>
Mybatis一對映器
例子 用xml和介面。介面 public inte ce iuserdao xml xml version 1.0 encoding utf 8 com.itheima.dao.iuserdao 配置查詢所有 findall resulttype com.itheima.domain.user se...
Mybatis 對映器元素
一 select元素 用於查詢 常用屬性 getbyid resulttype com.mybatis.domain.user parametertype int select from user where id select 根據id查詢使用者所有資訊,並將結果封裝到user類。resultma...
Mybatis 十 註解配置SQL對映器 一
mybatis對於大部分的基於xml的對映器元素提供了對應的基於註解的配置項。然而某些情況下,基於註解配置還不能支援基於xml的一些元素。在mybatis中提供了多種註解支援不同型別的語句比如 select,insert,update,delete。insert insert into studen...