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

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

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

瀏覽:188日期: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久久,三上悠亚国产精品一区二区三区
亚洲精品黄色| 香蕉久久夜色精品国产| 日本v片在线高清不卡在线观看| 欧美黄页在线免费观看| 亚洲精品看片| 日韩激情网站| 国产欧美久久一区二区三区| 国产欧美日韩影院| 欧美日韩91| 麻豆91小视频| 国产精品成人国产| 麻豆成人av在线| 国产91在线精品| 亚洲国产福利| 欧美在线观看视频一区| 宅男噜噜噜66国产日韩在线观看| 国产乱码精品一区二区三区四区| 日本一二区不卡| 久久av国产紧身裤| 国产suv精品一区二区四区视频 | 亚洲一区欧美| 丝袜国产日韩另类美女| 久久www成人_看片免费不卡| 亚洲欧美在线综合| 国产极品一区| 99精品国产一区二区三区| 99国产精品视频免费观看一公开 | 欧美成人a交片免费看| 成人日韩在线| 欧美特黄a级高清免费大片a级| 老司机免费视频一区二区| 免费一级欧美在线观看视频 | 欧美成人综合| 一本色道精品久久一区二区三区| 国产一区二区三区四区五区传媒| 久久亚洲不卡| 久久狠狠久久| 91精品韩国| 免费成人在线影院| 麻豆成人在线观看| 亚洲午夜91| 日韩精品中文字幕一区二区| 久久婷婷国产| 激情婷婷久久| 日本成人一区二区| 黄色在线网站噜噜噜| 六月天综合网| 国产精品久久久久久久久久妞妞| 免费看日韩精品| 国产精品一国产精品k频道56| 综合五月婷婷| 麻豆精品在线观看| 久久精品亚洲人成影院 | 精品欧美一区二区三区在线观看| 欧美国产三级| 久久精品导航| 日韩精品免费一区二区夜夜嗨 | 日本不卡视频在线观看| 国语精品一区| 亚洲免费网址| 国产一区二区三区日韩精品| 日韩一区二区免费看| 麻豆高清免费国产一区| 免播放器亚洲| 国产精品黑丝在线播放| 亚洲狼人精品一区二区三区| 久久男人天堂| 日韩精品亚洲一区二区三区免费| 四虎成人精品一区二区免费网站| 欧美日韩国产亚洲一区| 欧美视频一区| 久久精品123| 国产精品密蕾丝视频下载| 国产婷婷精品| 日韩免费av| 国产亚洲欧美日韩在线观看一区二区| 日韩国产欧美在线播放| 精品国产网站| 亚洲精品日韩久久| 欧美日韩在线网站| 麻豆久久一区| 91综合久久爱com| 欧美日韩高清| 亚洲永久av| 麻豆一区二区在线| 日韩欧美激情电影| 亚洲va在线| 黄色精品视频| 国产精品videossex| 婷婷综合国产| 中文一区在线| 国产一区二区三区自拍| jizzjizz中国精品麻豆| 88久久精品| 丝袜国产日韩另类美女| 久久亚洲精品中文字幕蜜潮电影| 婷婷成人综合| 精品精品久久| 国产激情精品一区二区三区| 亚洲v天堂v手机在线| 国产精品尤物| 欧美日韩国产免费观看视频| 日本午夜精品一区二区三区电影| 天堂va欧美ⅴa亚洲va一国产| 亚洲色图网站| 久久蜜桃精品| 欧美国产美女| 国产精品一区二区三区av| 亚洲精品日本| 一级成人国产| 亚洲一区成人| 激情视频一区二区三区| 国产高潮在线| 国产成人精品福利| 欧美激情一区| 欧美韩一区二区| 69堂免费精品视频在线播放| 日韩精品一级| 日韩精品视频一区二区三区| 中文字幕日本一区二区| 在线精品视频一区| 自拍自偷一区二区三区| 噜噜噜躁狠狠躁狠狠精品视频 | 久草精品视频| 国产精品视频一区二区三区 | 国产视频网站一区二区三区| 免费视频久久| 蜜臀久久99精品久久久画质超高清 | 精品国产一区二区三区2021| 久久国产精品免费一区二区三区| 热三久草你在线| 日韩不卡手机在线v区| 日本伊人久久| 国产日产精品_国产精品毛片 | 日韩中文字幕亚洲一区二区va在线| 国产精品sm| 国产欧美一级| 久久精品免视看国产成人| 国内在线观看一区二区三区| 天堂av在线| 日韩一级欧洲| 日韩精品免费观看视频| 欧美精品三级在线| 国产精品美女午夜爽爽| 国产精品毛片久久久| 麻豆一区二区在线| 激情国产在线| 在线成人直播| 婷婷亚洲成人| 精品国产一区二区三区av片| 欧美成人精品三级网站| 国产一区二区高清| 欧美一级全黄| 成人三级高清视频在线看| 国产一区视频在线观看免费| 蜜桃av一区二区| 国产乱论精品| 97精品国产| 尤物tv在线精品| 蜜臀精品久久久久久蜜臀 | 日韩午夜视频在线| 国产精品久久久久久久久免费高清| 视频在线观看国产精品| 一区二区国产在线观看| 国产乱论精品| 亚洲福利国产| 久久激五月天综合精品| 伊人久久视频| 在线精品国产亚洲| 国产精品调教| 久久亚洲国产| 亚洲精一区二区三区| 精品少妇一区| 国产女优一区| 精品视频一区二区三区在线观看 | 国产成人久久精品一区二区三区| 天堂精品久久久久| 久久精品99国产精品日本| 里番精品3d一二三区| 欧美综合另类| 国产精品一区2区3区| 亚洲日产国产精品| 牛牛精品成人免费视频| 免费观看不卡av| 欧美在线黄色| 亚洲第一精品影视| 国产精品香蕉| 国产亚洲亚洲| 精品成av人一区二区三区| 中文国产一区| 国内不卡的一区二区三区中文字幕| 日韩精品免费观看视频| 欧美激情精品| 国产精品人人爽人人做我的可爱| 精品中文字幕一区二区三区av| av综合电影网站| 自拍自偷一区二区三区| 日韩一区亚洲二区| 偷拍亚洲精品| 在线看片福利|