mybatis一對一對映配置詳解

2022-06-14 22:00:11 字數 3135 閱讀 5301

聽說mybatis一對一有三種寫法,今天我試了一下。

為了偷懶,我直接就拿使用者許可權選單裡的選單表和選單與許可權的中間表做實現,他們原來是多對多的關係,這邊我假設這兩張表是一對一。

表  gl_role_men:id,role_id,menu_id     --------->  實體類 glrolemenumodel  private string id;private string roleid;private string menuid;private menumodel menu;

表  menu:id,menu_name,url         --------->  實體類 menumodel private string id;private string menuname;private string url;

這個對映檔案裡的寫法有幾個要注意的地方,因為是glrolemenumodel裡放了menumodel的資訊,所以我稱glrolemenumodel是維護關係的一方,那麼resultmap的type就是glrolemenumodel

property對應是實體類的屬性,column對應的是資料庫裡表欄位名
<

resultmap

type

="com.tieasy.model.glrolemenumodel"

id="glrolemenu_menu_map"

>

<

id property

="id"

column

="id"

/>

<

result

property

="roleid"

column

="role_id"

/>

<

result

property

="menuid"

column

="menu_id"

/>

<

result

property

="menu.menuname"

column

="menu_name"

/>

<

result

property

="menu.url"

column

="url"

/>

resultmap

>

<

select

id="glrolemenu_getallglrolemenuandmenu"

resultmap

="glrolemenu_menu_map"

>

select

gl_role_menu.id,

gl_role_menu.role_id,

gl_role_menu.menu_id,

menu.menu_name,

menu.url

from gl_role_menu left join menu on gl_role_menu.menu_id = menu.id;

select

>

glrolemenudao

listgetallglrolemenuandmenu();
glrolemenudaoimpl

public listgetallglrolemenuandmenu()
action裡呼叫介面實現方法

listlist = glrolemenudao.getallglrolemenuandmenu();
返回list的json

[}]
這邊使用到了association,這個真的很神奇,原諒我很土鱉,和第一種的寫法區別不大,主要就是把被維護的哪一方menumodel換成用來寫

淡黃色背景的就是改動的部分

select 

gl_role_menu.id,

gl_role_menu.role_id,

gl_role_menu.menu_id,

menu.menu_name,

menu.url

from gl_role_menu left join menu on gl_role_menu.menu_id =menu.id;

其它檔案都不需要動

元素被用來匯入「有乙個」(has-one)型別的關聯。在上述的例子中,我們使用了元素引用了另外的在同乙個xml檔案中定義的。

同時我們也可以使用定義內聯的resultmap。

select 

gl_role_menu.id,

gl_role_menu.role_id,

gl_role_menu.menu_id,

menu.menu_name,

menu.url

from gl_role_menu left join menu on gl_role_menu.menu_id =menu.id;

還是只有對映檔案有改變,但是我這邊是因為資料庫裡每張表只有一條資料,所以其實實際id="glrolemenu_getallglrolemenuandmenu"的這個select是要有個查詢條件parametertype,哎,我是有多懶。不過反正是查出來了。

在此方式中,元素的select屬性被設定成了id為glrolemenu_getmenubyid的語句。這裡,兩個分開的sql語句將會在資料庫中分別執行。

看看mybatis列印的資訊,確定是分兩次查詢的

這個mybatis一對一配置,對於我這種懶人我選的話可能會選第一二種寫法,但是需要強調的是第三種方法可以實現懶載入,因為它是分兩個sql先後執行的,當選擇懶載入的時候,只會執行第乙個sql,只有當我們需要訪問到第二條sql的資料的時候,才會觸發它執行,這就是所謂的懶載入。

嗯,那什麼,就和單例模式的餓漢模式和懶漢模式類似。

mybatis一對一對映配置詳解

聽說mybatis一對一有三種寫法,今天我試了一下。為了偷懶,我直接就拿使用者許可權選單裡的選單表和選單與許可權的中間表做實現,他們原來是多對多的關係,這邊我假設這兩張表是一對一。表 gl role men id,role id,menu id 實體類 glrolemenumodel private...

Mybatis 一對一關係對映

一對一關係 使用人和身份證為例 實體類 person端 用這一端來維護關係 private integer id private string name private integer cid private card card 生成對應的set,get方法 card端 private intege...

Mybatis註解實現 一對一對映 一對多對映

results id usermap value one 相當於 xml 檔案中的 association 標籤 column 代表資料庫中的字段 property 代表 pojo 類中的屬性 和上面的column 形成一一對應的關係 results 註解對應的 id值 可以使用 resultmap...