MyBatis 高階查詢之多對多查詢(十一)

2022-03-09 18:47:47 字數 1361 閱讀 4655

查詢條件:根據玩家名,查詢遊戲資訊

/**

* 根據玩家名查詢遊戲

* @param name 玩家名

* @return 玩家實體類

*/public playerentity selectplayerbyname(string name);

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

關聯查詢方式

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

select p.*,g.* from tb_player as p join tb_player_game as p_g on p.id = p_g.player_id join tb_game as g on g.id = p_g.game_id where p.name = '張三'
這條 sql 語句有點長,涉及三表關聯查詢,因為多對多相比一對多而言,多了一張中間表哈。

我們在資料庫中執行這條 sql 語句,結果如下:

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

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

public class playerentity
這樣,通過玩家名查詢的遊戲資訊就可以對映到 games 屬性中。對了,set 和 get 方法以及 tostring 方法自己補上哈。

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

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

select p.*,g.* from tb_player as p

join tb_player_game as p_g on p.id = p_g.player_id

join tb_game as g on g.id = p_g.game_id where p.name = #

除了三表關聯查詢,其他和一對多關聯對映差不多。

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

@test

public void selectplayerbynametest()

執行測試,結果如下:

可以思考一下,如果這裡需要列印賬號資訊,你可以嘗試一下能否自己獨立搞定。

mybatis 多對多查詢

查詢使用者及使用者購買商品資訊。查詢主表是 使用者表 user 關聯表 由於使用者和商品沒有直接關聯,通過訂單和訂單明細進行關聯,所以關聯表是 orders orderdetail items select orders.order表的唯一標識 user表的唯一標識 user.username,us...

mybatis高階查詢 一對一 多對一

mybatis使用標籤 一的一方配置標籤 對應返回值單個實體 多的一方配置 標籤 對應返回值集合 根據實體類的定義,如果是屬性集合就配置,如果返回的資料是乙個實體的就配置 多表查詢時,需要乙個實體類多個表的資料.那麼需要將表與表的關係,也要反應在實體類與實體類之間的關係.配置一條資料的一方,使用實體...

mybatis 一對多查詢

查詢訂單及訂單明細的資訊。這裡怎麼體現了一對多 這裡orders的id出現重複的記錄,無法對映到orders類中 collection 對關聯查詢到多條記錄對映到集合物件中 4 查詢訂單 關聯使用者 及訂單明細 public listfindordersandorderdetailresultmap...