MyBatis對映器詳解 insert元素

2021-10-04 15:23:21 字數 1852 閱讀 8452

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