日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Mybatis中連接查詢和嵌套查詢實例代碼

瀏覽:186日期:2023-10-20 16:09:47

首先在mysql中確立表:

#表一:地址國家表CREATE TABLE address(aid INT AUTO_INCREMENT PRIMARY KEY,aname VARCHAR(20));INSERT INTO address VALUES(NULL,'魏國');INSERT INTO address VALUES(NULL,'蜀國');INSERT INTO address VALUES(NULL,'吳國');#表二:出場人物表CREATE TABLE person(pid INT AUTO_INCREMENT PRIMARY KEY,pname VARCHAR(20),paid INT,CONSTRAINT pafk FOREIGN KEY person(paid) REFERENCES address(aid) ON UPDATE CASCADE ON DELETE CASCADE);INSERT INTO person VALUES(1,'曹操',1);INSERT INTO person VALUES(2,'荀??,1);INSERT INTO person VALUES(3,'張遼',1);INSERT INTO person VALUES(4,'劉備',2);INSERT INTO person VALUES(5,'關羽',2);INSERT INTO person VALUES(6,'張飛',2);INSERT INTO person VALUES(7,'諸葛亮',2);INSERT INTO person VALUES(8,'孫權',3);INSERT INTO person VALUES(9,'周瑜',3);INSERT INTO person VALUES(10,'陸遜',3);INSERT INTO person VALUES(11,'公孫瓚',NULL);#表三:交通工具表CREATE TABLE tool(tid INT AUTO_INCREMENT PRIMARY KEY,tname VARCHAR(20));INSERT INTO tool VALUES(1,'馬');INSERT INTO tool VALUES(2,'船');#表四:地址國家——交通工具 多對多關系表CREATE TABLE aandt(a_aid INT,a_tid INT,PRIMARY KEY(a_aid,a_tid),#聯合主鍵,是指多個字段組成一個組合,該組合在數據表中唯一CONSTRAINT FOREIGN KEY aandt(a_aid) REFERENCES address(aid) ON UPDATE CASCADE ON DELETE CASCADE,CONSTRAINT FOREIGN KEY aandt(a_tid) REFERENCES tool(tid) ON UPDATE CASCADE ON DELETE CASCADE);INSERT INTO aandt VALUES(1,1);INSERT INTO aandt VALUES(2,1);INSERT INTO aandt VALUES(2,2);INSERT INTO aandt VALUES(3,2);

查詢a表的所有信息,如果a表的信息有對應的b表的信息,則查詢b表的信息,如果沒有,則不查詢。

多對一,如:查詢所有人物信息,如果人物有對應國家,則查詢國家信息,如果沒有,則不查詢。多個人物屬于一個國家。

一對多,如:查詢所有國家信息,如果國家有對應人物,則查詢人物信息,如果沒有,則不查詢。一個國家擁有多個城市。

多對多,如:查詢所有國家信息,如果國家擁有對應的交通工具,則查詢交通工具信息,沒有則不查詢。與此同時,多種交通工具存在于于多個國家。

一、連接查詢:

連接查詢使用時,使用偏向于a表所在方向的外連接,可獲得a表所有信息,和對應的b表信息。該方式為餓漢式,內存占用較大,但對數據庫訪問次數較少而導致消耗時間少。

1、多對一:

<!--多對一的數據庫--> <mapper namespace='com.fh.dao.PersonDao'> <!--該映射的id為map1,該映射的內容為:將查詢到的字段的結果值,按照本映射的對應關系,分別封裝在Person實體類下的各個屬性上,整體構成Person--> <resultMap type='com.fh.domain.Person'> <id column='pid' property='pid'/><!--id:主鍵映射; column:數據庫表字段; property:類中對應屬性名--> <result column='pname' property='pname'/><!--result:非主鍵映射--> <result column='paid' property='paid'/> <association property='address' javaType='com.fh.domain.Address'><!--association:在查詢到多,然后對應出一時,用于關聯對應出一的一方; property:查詢類中包含的子對象屬性; javaType:子對象屬性封裝對應的類--> <id column='aid' property='aid'/> <result column='aname' property='aname'/> </association> </resultMap> <select resultMap='map1'>/*resultMap:自己編寫的結果集,本查詢的返回值正是該結果集所對應的映射組構成的Person*/-- 查詢所有人及其對應的地址,以人為主,則對人側外連接 SELECT * FROM person p LEFT OUTER JOIN address a ON p.paid = a.aid </select></mapper>2、一對多:

<!--一對多的數據庫--> <mapper namespace='com.fh.dao.AddressDao'> <resultMap type='com.fh.domain.Address'> <id column='aid' property='aid'/> <result column='aname' property='aname'/> <collection property='personList' ofType='com.fh.domain.Person'><!--collection:查詢到一,接著關聯對應出多時,指向多的一方; foType:集合中每個元素所屬的映射類--> <id column='pid' property='pid'/> <result column='pname' property='pname'/> <result column='paid' property='paid'/> </collection> </resultMap> <select resultMap='map2'> SELECT * FROM address a LEFT OUTER JOIN person p ON a.aid = p.paid; </select></mapper>3、多對多:

<mapper namespace='com.fh.dao.ToolDao'> <resultMap type='com.fh.domain.Tool'> <id column='tid' property='tid'/> <result column='tname' property='tname'/> <collection property='addressList' ofType='com.fh.domain.Address'> <id column='aid' property='aid'/> <result column='aname' property='aname'/> </collection> </resultMap> <select resultMap='map3'> SELECT t.*,a.* FROM tool AS t LEFT OUTER JOIN aandt AS a_t ON t.`tid` = a_t.`a_tid` LEFT OUTER JOIN address AS a ON a_t.`a_aid` = a.`aid`; </select>二、嵌套查詢:

嵌套查詢使用時,先查詢a表的信息,然后依賴a和b表的外鍵約束,利用in(),再次查詢b表對應到a表上的信息。該方式可以改為餓漢式,內存使用較小,但需要多次訪問數據庫而導致消耗時間多。

1、多對一:

PersonDao接口內寫入:

//查詢所有人,以及其對應的地址 List<Person> findPersonFromAddress();

對應映射配置中:

<!--多對一的數據庫--> <mapper namespace='com.fh.dao.PersonDao'> <!--person映射的基本屬性對應下面person的結果集,本結果集內部再繼續進行處理--> <resultMap type='com.fh.domain.Person'> <id column='pid' property='pid'/> <result column='pname' property='pname'/> <result column='paid' property='paid'/> <!-- 對應到person內的子屬性對象,column內為person對應到address的外鍵,由此外鍵,傳入select內的方法進行二次嵌套查詢,交由AddressDao在其中的指定方法進行處理 即要求查詢目標為:Address.aid = Person.paid --> <association property='address' column='paid' select='com.fh.dao.AddressDao.findAddressById'/> </resultMap> <!--第一次查詢為只查詢主要對象,自定義結果集--> <select resultMap='map1'> select * from person </select></mapper>

繼續編寫指向AddressDao接口中的findAddressById:

//按照id查詢AddressList<Address> findAddressById(Integer id);

回到AddressDao配置文件:

<mapper namespace='com.fh.dao.AddressDao'> <!--根據id對address查詢--> <select resultType='com.fh.domain.Address'> SELECT * FROM address WHERE aid = #{aid} </select>2、一對多:

AddressDao接口內寫入:

List<Address> findAddressWithPerson();

其對應映射配置中:

<resultMap type='com.fh.domain.Address'> <id column='aid' property='aid'/> <result column='aname' property='aname'/> <collection property='personList' column='aid' select='com.fh.dao.PersonDao.findPersonById'/> </resultMap> <select resultMap='map2'> select * from address </select>

針對指出的PersonDao接口的findPersonById:

List<Person> findPersonById(Integer id);

其對應的映射配置中:

<select resultType='com.fh.domain.Person'> select * from person where pid = #{pid} </select>

對于嵌套查詢的延遲加載問題,需添加配置:

方法一:

association或collection中多加一條屬性:fetchType=“lazy”

方法二:

<settings> <setting name='lazyLoadingEnable' value='true'/> <setting name='lazyLoadTriggerMethods' value='true'/><!--本條設置表示將包括原本不會延遲加載的equals/clone/hashCode/toString在內所有方法進行延遲加載--> </settings>

到此這篇關于Mybatis中連接查詢和嵌套查詢的文章就介紹到這了,更多相關Mybatis連接查詢和嵌套查詢內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲欧美日本日韩| 欧美国产日本| 爽爽淫人综合网网站| 日韩精品三区四区| 久久精品国产99国产精品| 在线一区视频观看| 免费久久99精品国产| 国产精品视频一区二区三区综合| 国产精品原创| 国产精品99免费看| 欧美日韩亚洲一区| 香蕉成人av| 亚洲91网站| 麻豆mv在线观看| 亚洲综合激情在线| av免费不卡国产观看| 亚洲影视一区二区三区| 四虎国产精品免费观看| 国产亚洲精品v| 麻豆精品在线播放| 日韩视频久久| 国产精品成人国产| 亚洲精品1区2区| 美日韩一区二区三区| 极品日韩av| 国产经典一区| 视频一区二区国产| 免费看av不卡| 91欧美极品| 91成人网在线观看| 韩日一区二区| 亚洲va久久| 在线一区视频观看| 国产精品中文字幕制服诱惑| 亚洲深夜福利| 特黄毛片在线观看| 国产精品一区二区av日韩在线| 久久亚洲二区| 免费欧美一区| 亚洲三级视频| 久久精品国产久精国产| 在线国产一区二区| 日本91福利区| 红桃视频国产精品| 日韩中文字幕区一区有砖一区 | 一区二区精品伦理...| 一区二区不卡| 99久久九九| 久久精品免视看国产成人| 日韩中文字幕不卡| 久久精品二区三区| 国产一区二区三区成人欧美日韩在线观看| 欧美 日韩 国产精品免费观看| 久久影院一区二区三区| 免费在线观看一区二区三区| 日韩啪啪电影网| 欧美激情一区| 国产精区一区二区| 日本午夜大片a在线观看| 视频一区在线播放| 欧美91在线| 免费看欧美美女黄的网站| 成人三级高清视频在线看| 日本中文字幕一区二区视频 | 亚洲狼人精品一区二区三区| 欧美成人基地| 国产美女高潮在线观看| 国产精品一区二区中文字幕| 黄色日韩精品| 免费av一区| 久久久久国产精品一区三寸| 国产成人久久精品麻豆二区 | 精品国产不卡一区二区| 欧美精品中文字幕亚洲专区| 亚洲精品三级| 亚洲五月综合| 乱人伦精品视频在线观看| 亚洲网站视频| 国产va免费精品观看精品视频| 国产欧美久久一区二区三区| 欧美午夜三级| 91在线成人| 久久精品99国产国产精| 91亚洲精品视频在线观看| 日本成人在线一区| 日韩在线成人| 日韩精品亚洲aⅴ在线影院| 视频一区视频二区中文| 噜噜噜躁狠狠躁狠狠精品视频| 夜夜嗨网站十八久久| 亚洲欧美日本视频在线观看| 日欧美一区二区| 狠狠久久伊人| 日韩av网站免费在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲成人精品| 日韩中文在线播放| 欧美三区四区| 欧美aa一级| 国产一区国产二区国产三区| 国产精品成人**免费视频 | 99精品网站| 日韩高清成人| 亚洲天堂资源| 精品欧美日韩精品| 国产亚洲一卡2卡3卡4卡新区| 视频一区二区三区中文字幕| 欧美成人久久| 欧美日中文字幕| 精精国产xxxx视频在线野外| 91亚洲国产| 成人美女视频| 秋霞影院一区二区三区| 日韩一区二区三区在线免费观看| 成人一区而且| 精品国产中文字幕第一页| 国产精品久久亚洲不卡| 国产亚洲一区| 欧美a一区二区| 麻豆视频一区| 国产精品亚洲欧美一级在线| 婷婷综合福利| 亚洲欧美久久精品| 日韩在线a电影| 综合激情五月婷婷| 日本v片在线高清不卡在线观看| 精品国产亚洲一区二区三区大结局| 国产精品一区亚洲| 一本大道色婷婷在线| 国产精品人人爽人人做我的可爱 | 国产精品一区二区三区四区在线观看| 国产在线一区不卡| 亚洲网站视频| 日韩高清不卡一区| 免费一区二区三区在线视频| 丁香六月综合| 中文一区一区三区免费在线观| 国产欧美自拍一区| 日本在线啊啊| 中文字幕亚洲影视| 国产美女撒尿一区二区| 精品中文字幕一区二区三区 | 狠狠操综合网| 日韩中文字幕1| 国产麻豆精品| 激情国产在线| 9久re热视频在线精品| 丝袜国产日韩另类美女| 午夜久久av| 欧美国产视频| 日韩啪啪电影网| 午夜在线视频观看日韩17c| 日韩综合小视频| 精品资源在线| 欧美日韩国产传媒| 日本亚洲视频| 老司机精品视频网| 尤物tv在线精品| 亚洲一区二区免费在线观看| 国产欧美亚洲一区| 另类中文字幕国产精品| 视频在线观看一区| 国产精品亚洲综合久久| 麻豆精品蜜桃| 亚洲1区在线观看| 精品久久久网| 国产女优一区| 美女视频黄 久久| 欧洲毛片在线视频免费观看| 日本va欧美va精品| 日韩国产一区二区三区| 蜜臀va亚洲va欧美va天堂| 九九99久久精品在免费线bt| 欧美日韩国产免费观看 | 蜜桃成人精品| 亚洲一区二区免费在线观看| 日本在线高清| 久久激五月天综合精品| 亚洲国产一区二区在线观看 | 国产99久久久国产精品成人免费| 日本欧美一区二区| 亚洲国产日韩欧美在线| 四虎8848精品成人免费网站| 欧美一区激情| 日韩在线a电影| 免费久久精品| 国产不卡一区| 欧美激情aⅴ一区二区三区 | 国产成人精品一区二区三区视频| 悠悠资源网久久精品| 欧美a级一区二区| 中文无码日韩欧| 91精品精品| 卡一卡二国产精品| 天堂va欧美ⅴa亚洲va一国产| 日韩精品欧美激情一区二区| 久久国内精品| 美女少妇全过程你懂的久久| 欧美黄色一区| 亚洲午夜国产成人|