mybatis plus 多表查询_Mybatis 多表查询之一对多
本次案例主要以最為簡單的用戶和賬戶的模型來分析Mybatis多表關(guān)系。用戶為User 表,賬戶為Account 表。一個用戶(User)可以有多個賬戶(Account)。具體關(guān)系如下:
3.1 一對一查詢(多對一)
需求 查詢所有賬戶信息,關(guān)聯(lián)查詢下單用戶信息。 注意: 因為一個賬戶信息只能供某個用戶使用,所以從查詢賬戶信息出發(fā)關(guān)聯(lián)查詢用戶信息為一對一查詢。如 果從用戶信息出發(fā)查詢用戶下的賬戶信息則為一對多查詢,因為一個用戶可以有多個賬戶。
3.1.1 方式一
3.1.1.1 定義賬戶信息的實體類
public3.1.1.2 編寫 Sql 語句
實現(xiàn)查詢賬戶信息時,也要查詢賬戶所對應(yīng)的用戶信息。
<!在 MySQL 中測試的查詢結(jié)果如下:
3.1.1.3 定義 AccountUser 類
為了能夠封裝上面 SQL 語句的查詢結(jié)果,定義 AccountCustomer 類中要包含賬戶信息同時還要包含用戶信 息,所以我們要在定義 AccountUser 類時可以繼承 User 類。
public3.1.1.4 定義賬戶的持久層 Dao 接口
public3.1.1.5 定義 AccountDao.xml 文件中的查詢配置信息
<!--查詢所有賬戶同時包含用戶名和地址信息-->注意:因為上面查詢的結(jié)果中包含了賬戶信息同時還包含了用戶信息,所以我們的返回值類型 returnType 的值設(shè)置為 AccountUser 類型,這樣就可以接收賬戶信息和用戶信息了。
3.1.1.6 創(chuàng)建 AccountTest 測試類
/**3.1.1.7 小結(jié)
定義專門的 po 類作為輸出類型,其中定義了 sql 查詢結(jié)果集所有的字段。此方法較為簡單,企業(yè)中使用普 遍。
3.1.2 方式二
使用 resultMap,定義專門的 resultMap 用于映射一對一查詢結(jié)果。 通過面向?qū)ο蟮?has a)關(guān)系可以得知,我們可以在 Account 類中加入一個 User 類的對象來代表這個賬戶 是哪個用戶的。
3.1.2.1 修改 Account 類
public3.1.2.2 修改 AccountDao 接口中的方法
/**3.1.2.3 重新定義 AccountDao.xml 文件
<!-- 定義封裝account和user的resultMap -->3.1.2.4 在 AccountTest 類中加入測試方法
/**3.2 一對多查詢
需求: 查詢所有用戶信息及用戶關(guān)聯(lián)的賬戶信息。
分析: 用戶信息和他的賬戶信息為一對多關(guān)系,并且查詢過程中如果用戶沒有賬戶信息,此時也要將用戶信息 查詢出來,我們想到了左外連接查詢比較合適。
3.2.1 編寫 SQL 語句
3.2.2 User 類加入 List<Account
//一對多關(guān)系映射:主表實體應(yīng)該包含從表實體的集合引用3.2.3 用戶持久層 Dao 接口中加入查詢方法
/**xml配置
<!-- 定義User的resultMap-->collection 部分定義了用戶關(guān)聯(lián)的賬戶信息。表示關(guān)聯(lián)查詢結(jié)果集 property="accList" :
關(guān)聯(lián)查詢的結(jié)果集存儲在 User 對象的上哪個屬性。 ofType="account" :
指定關(guān)聯(lián)查詢的結(jié)果集中的對象類型即List中的對象類型。此處可以使用別名,也可以使用全限定名。
3.2.5 測試方法
/**總結(jié)
以上是生活随笔為你收集整理的mybatis plus 多表查询_Mybatis 多表查询之一对多的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python编程300例_经典编程100
- 下一篇: miniui datagrid 隐藏列默