實現關聯資料的查詢(多對一)

2022-05-08 22:33:09 字數 2332 閱讀 6199

在實際專案中,經常是關聯表的查詢,比如最常見到的多對一,一對多等。這些查詢是如何處理的呢,這一講就講這個問題。我們首先建立乙個 article 這個表,並初始化資料。

drop table if exists `article`;

create table `article` (

`id` int(11) not null auto_increment,

`userid` int(11) not null,

`title` varchar(100) not null,

`content` text not null,

primary key (`id`)

) engine=innodb auto_increment=5 default charset=utf8;

-- ----------------------------

-- 新增幾條測試資料

-- ----------------------------

insert into `article` values ('1', '1', 'test_title', 'test_content');

insert into `article` values ('2', '1', 'test_title_2', 'test_content_2');

insert into `article` values ('3', '1', 'test_title_3', 'test_content_3');

insert into `article` values ('4', '1', 'test_title_4', 'test_content_4');

你應該發現了,這幾個文章對應的 userid 都是 1,所以需要使用者表 user 裡面有 id=1 的資料。可以修改成滿足自己條件的資料.按照 orm 的規則,表已經建立了,那麼肯定需要乙個物件與之對應,所以我們增加乙個 article 的 class。

public class article 

public void setid(int id)

public user getuser()

public void setuser(user user)

public string gettitle()

public void settitle(string title)

public string getcontent()

public void setcontent(string content)

}

注意一下,文章的使用者是怎麼定義的,是直接定義的乙個 user 物件。而不是 int 型別。

場景:在讀取某個使用者發表的所有文章。當然還是需要在 user.xml 裡面配置 select 語句, 但重點是這個 select 的 resultmap 對應什麼樣的資料呢。這是重點,這裡要引入 association 看定義如下:

select user.id,user.username,user.useraddress,article.id aid,article.title,article.content from user,article

where user.id=article.userid and user.id=#

這樣配置之後,就可以了,將 select 語句與 resultmap 對應的對映結合起來看,就明白了。用 association 來得到關聯的使用者,這是多對一的情況,因為所有的文章都是同乙個使用者的。

還有另外一種處理方式,可以復用我們前面已經定義好的 resultmap ,看這第二種方法如何實現:

select user.id,user.username,user.useraddress,article.id aid,article.title,article.content from user,article

where user.id=article.userid and user.id=#

將 association 中對應的對映獨立抽取出來,可以達到復用的目的。

然後我們一定要在 iuseroperation 介面中,加入 select 對應的 id 名稱相同的方法:

public listgetuserarticles(int id);

好了,現在在 test 類中寫測試**:

public void getuserarticles(int userid)

} finally

}

Hibernate關聯查詢 一對多雙向關聯

dept實體類 public class dept public void setemps setemps private setemps new hashset public integer getdeptno public void setdeptno integer deptno public...

關聯的多對多

一,資料庫的多對多 a.資料庫中不能直接對映多對多 處理 建立乙個橋接表 中間表 將乙個多對多關係轉換成兩個一對多 注1 資料庫多表聯接查詢,永遠就是二個表的聯接查詢 注2 交叉連線 注3 外連線 left 左 right 右 full 左右 主從表 連線條件不成立時,主表記錄永遠保留,與null匹...

php對關聯陣列迴圈遍歷的實現方法

php對於類似 age array zhangshan 14,lilvtmkysi 15,sharejs 16 這樣lvtmky的陣列lvtmky可以通過foreach的方法進行遍歷,下面是詳細的 age array zhangshan 14,lisi 15,sharejs 16 foreach a...