好程序員Java學習路線分享之關聯查詢,我們進行數據庫查詢時往往需要的不止一張表的數據下面顯示的是查詢設計,需要將多張表的數據一起查詢出來,大家學習過數據庫的連接查詢,那么在中如何將有關系的多張表數據進行關聯查詢呢。
好程序員
表的結構
商品和訂單是典型的一對多關系,下面的案例我們將以商品表和訂單表作為示例,演示如何配置最常見的一對多關系,下面是兩張表的結構:
商品表:
訂單表:
實體類的設計
一種商品有多個訂單,每個訂單對應一種商品,在實體類中體現這個關系。
訂單實體類:
/**
* 訂單類
*/
class Order {
id;
num;
;
time;
/**
* 訂單對應的商品對象
*/
Goods goods;
商品實體類:
/**
* 商品類
*/
class Goods {
id;
name;
price;
;
/**
* 訂單集合
*/
List ;
接口設計
這里我們只介紹關聯查詢,所以只定義了基本的查詢方法
/**
* 商品接口
*/
{
//根據編號查詢商品
Goods (int id);
}
/**
* 訂單接口
*/
{
//根據訂單id查詢訂單
Order (int );
//根據商品id查詢訂單
List (int );
}
標簽
接下來就是重點了,我們在商品類中定義了訂單集合屬性,那么這個集合的數據如何進行查詢呢?這就需要我們在文件中使用標簽。
標簽用在標簽中,用于配置集合的查詢,用法是:
示例:
/p>
"-////DTD 3.0//EN"
="com...dao.."/>
* from where = #{id}
的意思是:
當商品對象需要集合時,就會調用的按商品id查詢所有訂單,商品id就是當前商品的值。
標簽
標簽的用法類似于,用于配置一對一的關系下面顯示的是查詢設計,每個訂單中有一個商品對象goods,這個對象查詢可以用來進行配置。
用法:
示例:
/p>
"-////DTD 3.0//EN"
="com...dao.."/>
* from where = #{id}
* from where = #{}
的意思是:
當訂單對象需要goods對象時,就調用的按商品id查詢商品,此商品id就是訂單中的外鍵列。
單元測試
@Test
void (){
= .().(.class);
//查詢商品
Goods goods = .(1);
.out.("查詢商品:"+goods);
//獲得商品所有的訂單
goods.().().((order)->.out.("商品的訂單"+order));
= .().(.class);
//查詢訂單
Order order = .(4);
.out.("查詢訂單"+order);
//獲得訂單對應的商品
.out.("訂單的商品:" + order.());
}
運行結果:
查詢商品:Goods{id=1, name='小米9手機', price=2000.0, ='上海'}
商品的訂單Order{id=1, num=2, =1, time='2019-9-12'}
商品的訂單Order{id=4, num=4, =1, time='2019-9-14'}
查詢訂單Order{id=4, num=4, =1, time='2019-9-14'}
訂單的商品:Goods{id=1, name='小米9手機', price=2000.0, ='上海'}
總結
中配置表的關聯關系,需要在中配置或標簽
配置的是一對多關系,屬性是集合的名稱,配置的是查詢集合的方法,配置查詢方法的參數對應的列名
配置的是一對一關系,屬性是對應對象的名稱,配置的是查詢集合的方法,配置查詢方法的參數對應的列名