MyBatis 高階查詢之一對一查詢(九)

2022-03-09 18:47:47 字數 1885 閱讀 5564

查詢條件:根據遊戲角色id,查詢賬號資訊

/**

* 根據角色id查詢賬號資訊

* @param id 角色id

* @return 角色實體物件

*/public roleentity selectrolebyid(int id);

接下來,我分別演示關聯查詢和子查詢方式實現介面方法的對映。

關聯查詢方式:

現在我們暫時先拋開 mybatis 框架,直接從資料庫出發寫一寫關聯查詢的 sql 語句,如下:

select r.*,a.* from tb_role as r join tb_account as a on r.account_id=a.id where r.id=1
另外,還有一種不使用 join 關鍵字的 sql 語句寫法,如下:

select r.*,a.* from tb_role as r,tb_account as a where r.account_id=a.id and r.id=1
第一種寫法,使用 join 關鍵字,本質上是採用的內連線(inner join)。

第二種寫法,不使用 join 關鍵字,本質上是採用交叉連線(cross join),也即生成兩表的笛卡爾積,得到的記錄相當於兩表記錄的乘積。

以上兩種寫法查詢結果是相同的,但推薦使用第一種,因為第一種效能比第二種高,特別是在有大表的情況下。

理由是第二種交叉連線將產生更多的記錄,然後通過 where 後的 r.account_id=a.id 條件過濾不需要的記錄,而第一種內連線會直接過濾不需要的記錄,所以執行效率更高。

我們執行一下查詢結果,如下:

現在,我們回到 mybatis 框架,看一下在 xml 對映檔案中,如何實現關聯查詢對映。

首先,我們需要建立 roleentity 實體類與 accountentity 實體類之間的關聯關係,如下:

public class roleentity
這樣,通過賬號名查詢的賬號資訊就可以對映到 account 屬性中。注意 account 屬性的 get 和 set 方法要記得新增上去,還有 tostring 方法要重寫一下,新增 account 屬性的列印資訊。

現在,我們來編寫對映檔案中 sql 語句對映,如下:

<?xml version="1.0" encoding="utf-8"?>

property:將關聯查詢的賬號資訊對映到屬性 account 上 -->

select r.*,a.* from tb_role as r join tb_account as a on r.account_id=a.id where r.id=#

和之前單錶對映相比,沒什麼太大差別,就是多了association子標記以及相應的內容罷了。

意思很也簡單,就是將關聯查詢結果中的賬號資訊,具體而言就是a.id,a.user_name,a.password,對映到 accountentity 例項中,也就是 roleentity.account 屬性。

最後,我們在 mybatistest 中新增乙個單元測試方法,如下:

@test

public void selectrolebyaccountnametest()

執行測試,結果如下:

roleentity}

這樣,我們通過遊戲角色id查詢到了遊戲賬號資訊,並封裝在 roleentity 物件的 account 屬性中。

mybatis 查詢一對一

官方文件 public inte ce user getuser intuserid public inte ce list getarticlebyuserid int userid 第一種方法 select a.article id,a.user id,a.title,a.content,a.c...

mybatis之一對一,一對多

resulttype 直接表示返回型別 基本資料型別 引用資料型別 resultmap 對外部resultmap 資料庫字段資訊和物件屬性不一樣 複雜的聯合查詢,自由控制對映結果 注 它們兩個不能同時存在 association select from class c,teacher t where...

MyBatis高階對映之 一對一(一對多)關聯對映

在hibernate中可以進行一對一,多對一,一對多,多對多,mybatis中也可以實現這種對映,但是對映就顯得比較麻煩了,下面看乙個一對一的例子,學了hibernate都知道其實一對一跟一對多的原理其實是一致的,所以也是一對多的例子 首先配置sqlmapconfig.xml public conf...