国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一對多分頁的SQL到底應該怎么寫?

數據庫 MySQL
MySQL一對多的數據分頁是非常常見的需求,比如我們要查詢商品和商品的圖片信息。但是很多人會在這里遇到分頁的誤區,得到不正確的結果。今天就來分析并解決這個問題。

前言

MySQL一對多的數據分頁是非常常見的需求,比如我們要查詢商品和商品的圖片信息。但是很多人會在這里遇到分頁的誤區,得到不正確的結果。今天就來分析并解決這個問題。

2. 問題分析

我們先創建一個簡單商品表和對應的商品圖片關系表,它們之間是一對多的關系:

然后我分別寫入了一些商品和這些商品對應的圖片,通過下面的左連接查詢可以看出它們之間具有明顯的一對多關系:

 

  1. SELECT P.PRODUCT_ID, P.PROD_NAME, PI.IMAGE_URL 
  2. FROM PRODUCT_INFO P 
  3.          LEFT JOIN PRODUCT_IMAGE PI 
  4.                    ON P.PRODUCT_ID = PI.PRODUCT_ID 

 

 

 

按照傳統的思維我們的分頁語句會這么寫:

  1. <resultMap id="ProductDTO" type="cn.felord.mybatis.entity.ProductDTO"
  2.     <id property="productId" column="product_id"/> 
  3.     <result property="prodName" column="prod_name"/> 
  4.     <collection property="imageUrls"  ofType="string"
  5.         <result column="image_url"/> 
  6.     </collection> 
  7. </resultMap> 
  8.  
  9. <select id="page" resultMap="ProductDTO"
  10.     SELECT P.PRODUCT_ID, P.PROD_NAME,PI.IMAGE_URL 
  11.     FROM PRODUCT_INFO P 
  12.              LEFT JOIN PRODUCT_IMAGE PI 
  13.                        ON P.PRODUCT_ID = PI.PRODUCT_ID 
  14.     LIMIT #{current},#{size
  15. </select>     

當我按照預想傳入了(0,2)想拿到前兩個產品的數據,結果并不是我期望的:

 

  1. 2020-06-21 23:35:54.515 DEBUG 10980 --- [main] c.f.m.mappers.ProductInfoMapper.page     : ==>  Preparing: SELECT P.PRODUCT_ID, P.PROD_NAME,PI.IMAGE_URL FROM PRODUCT_INFO P LEFT JOIN PRODUCT_IMAGE PI ON P.PRODUCT_ID = PI.PRODUCT_ID limit ?,?  
  2. 2020-06-21 23:35:54.541 DEBUG 10980 --- [main] c.f.m.mappers.ProductInfoMapper.page     : ==> Parameters: 0(Long), 2(Long) 
  3. 2020-06-21 23:35:54.565 DEBUG 10980 --- [main] c.f.m.mappers.ProductInfoMapper.page     : <==      Total: 2 
  4. page = [ProductDTO{productId=1, prodName='杯子', imageUrls=[http://asset.felord.cn/cup1.png, http://asset.felord.cn/cup2.png]}] 

我期望的兩條數據是杯子和筆記本,但是結果卻只有一條。原來當一對多映射時結果集會按照多的一側進行輸出(期望4條數據,實際上會有7條),而前兩條展示的只會是杯子的數據(如上圖),合并后就只有一條結果了,這樣分頁就對不上了。那么如何才能達到我們期望的分頁效果呢?

3. 正確的方式

正確的思路是應該先對主表進行分頁,再關聯從表進行查詢。

拋開框架,我們的SQL應該先對產品表進行分頁查詢然后再左關聯圖片表進行查詢:

 

  1. SELECT P.PRODUCT_ID, P.PROD_NAME, PI.IMAGE_URL 
  2. FROM (SELECT PRODUCT_ID, PROD_NAME 
  3.       FROM PRODUCT_INFO 
  4.       LIMIT #{current},#{size}) P 
  5.          LEFT JOIN PRODUCT_IMAGE PI 
  6.                    ON P.PRODUCT_ID = PI.PRODUCT_ID 

這種寫法的好處就是通用性強一些。但是MyBatis提供了一個相對優雅的路子,思路依然是開頭所說的思路。只不過我們需要改造上面的Mybatis XML配置:

  1. <resultMap id="ProductDTO" type="cn.felord.mybatis.entity.ProductDTO"
  2.     <id property="productId" column="product_id"/> 
  3.     <result property="prodName" column="prod_name"/> 
  4.      <!-- 利用 collection 標簽提供的 select 特性 和 column   --> 
  5.     <collection property="imageUrls" ofType="string" select="selectImagesByProductId" column="product_id"/> 
  6. </resultMap> 
  7. <!-- 先查詢主表的分頁數據    --> 
  8. <select id="page" resultMap="ProductDTO"
  9.     SELECT PRODUCT_ID, PROD_NAME 
  10.     FROM PRODUCT_INFO 
  11.     LIMIT #{current},#{size
  12. </select
  13. <!--根據productId 查詢對應的圖片--> 
  14. <select id="selectImagesByProductId" resultType="string"
  15.     SELECT IMAGE_URL 
  16.     FROM PRODUCT_IMAGE 
  17.     WHERE PRODUCT_ID = #{productId} 
  18. </select

4. 總結

大部分情況下分頁是很容易的,但是一對多還是有一些小小的陷阱的。一旦我們了解了其中的機制,也并不難解決。當然如果你有更好的解決方案可以留言討論,集思廣益。多多關注:碼農小胖哥,獲取更多開發技巧。

責任編輯:未麗燕 來源: segmentfault.com
相關推薦

2021-03-04 09:11:57

日志開發打印

2022-02-18 11:05:25

Jpa配置Address

2009-06-04 16:14:22

Hibernate一對Hibernate一對Hibernate多對

2010-07-07 08:33:09

SQL Server學

2009-09-22 09:55:58

Hibernate實例

2009-06-04 10:34:19

Hibernate一對一對多關系配置

2010-04-15 09:09:02

Hibernate

2009-06-03 16:27:27

Hibernate一對一關系

2009-07-21 17:31:39

iBATIS一對多映射

2023-03-27 08:03:26

Git代碼控制層

2020-09-15 12:59:48

KotlinFlutter移動

2020-09-17 14:20:24

數據科學簡歷崗位

2009-08-17 10:34:51

NHibernate一

2009-09-23 10:37:50

Hibernate一對

2009-06-26 10:15:54

面試HR

2012-03-21 11:43:41

JavaHibernate

2009-06-03 16:18:16

Hibernate關系代碼實例

2009-09-23 10:57:02

Hibernate一對

2010-09-03 15:08:03

SQLselect語句

2012-02-08 13:34:08

HibernateJava
點贊
收藏

51CTO技術棧公眾號

九九热线视频只有这里最精品| av毛片免费| 夜夜精品视频一区二区| 成人短视频软件网站大全app| 男女啪啪的视频| 欧美成人伊人久久综合网| 香蕉久久久久久久av网站| 蜜臀一区二区三区| 91美女高潮出水| 色视频成人在线观看免| 色狠狠久久av综合| 天天草夜夜草| 国产66精品久久久久999小说| 91国模大尺度私拍在线视频| 亚洲精品1234| 午夜dj在线观看高清视频完整版 | 青青草国产一区二区三区| 成人av在线播放观看| 久热99视频在线观看| 久久精品亚洲麻豆av一区二区| 蜜桃在线一区| 美女露隐私免费网站| 3d动漫啪啪精品一区二区免费| 欧美亚洲丝袜传媒另类| 久久久人人人| 国产成人午夜性a一级毛片| 在线观看免费黄网站| 91久久在线视频| 精品国产亚洲在线| 成人h动漫精品一区二区| 亚洲天堂av资源在线观看| 男男视频在线观看网站| 91麻豆蜜桃| 亚洲国产天堂网精品网站| 国产99久久久国产精品免费看| jizz国产精品| 韩国三级av在线免费观看| 国产伦精品一区二区三区高清版| 日韩精品丝袜在线| 最好看的中文字幕久久| 精品动漫一区| 肉色欧美久久久久久久免费看| www.99re.av| 久久66热这里只有精品| 中文字幕欧美精品在线| 一区二区三区四区国产精品| 日韩在线一二三区| 一区二区三区国产好| av在线天堂| 99久久久无码国产精品6| 亚洲一区二区中文字幕| 日韩国产中文字幕| 一区二区在线观看免费| 亚洲第一在线| 伊人久久一区| av中文字幕在线| 欧美亚洲另类色图| 国产福利一区二区三区在线观看| 最近中文字幕2019免费| 欧美视频一二三| 成人小视频在线| 国精一区二区| 福利小视频在线| 波多野结衣在线中文| 亚洲精品成人久久久998| 4p变态网欧美系列| 亚洲精品按摩视频| 偷窥少妇高潮呻吟av久久免费| 国产传媒久久文化传媒| 中文字幕日韩一区二区不卡| 一区二区三区无毛| 免费超碰在线| sm一区二区三区| 久久国产精品免费观看| 成人亚洲激情网| 日韩在线中文字| 欧洲国产伦久久久久久久| 久久久久久亚洲综合影院红桃| 亚洲永久免费| 欧美一区二区性| 国产免费av国片精品草莓男男| 福利视频在线| 中文在线a√在线8| 美女黄色片视频| 一区二区精品免费视频| 99理论电影网| 欧美综合在线第二页| 中文字幕日韩在线播放| 日韩一卡二卡三卡四卡| 亚洲一区二区视频在线观看| av亚洲精华国产精华| 日韩精品一级二级 | 国产欧美一区二区三区国产幕精品| 2020国产精品极品色在线观看| 国产理论电影在线| 偷偷要 色偷偷| 黄色片视频在线播放| 最新欧美日韩亚洲| 久久riav二区三区| 91亚洲精品久久久| 国产ts一区二区| 久久久久久网站| 久久国产精品免费视频| 伊人青青综合网站| 精品亚洲一区二区三区在线播放| 欧美精品成人一区二区三区四区| 精品久久久久久久久久| 日韩毛片在线免费观看| 91在线精品一区二区| 国产成人在线色| 九色综合国产一区二区三区| 视频一区中文字幕国产| 国产精品一级| 亚洲一区区二区| 国产亚洲一级| 欧美国产日本| 欧美一区激情| 欧美一区二区| 欧美高清一区| 国产精品大片| 国产一区欧美| 亚洲视频福利| 亚洲黄色成人| 中文日韩在线| 国产欧美日韩一区二区三区在线| 欧美粗暴jizz性欧美20| 欧美精品国产| 国内精品久久久久国产盗摄免费观看完整版 | 国产亚洲第一伦理第一区| 伊人久久影院| 年轻的保姆91精品| 精品国产伦一区二区三区观看说明| 日韩专区视频网站| 日韩亚洲精品在线观看| aiai久久| 要久久电视剧全集免费 | 国产精美视频| 五月天最新网址| 在线播放免费| 福利片在线看| bt在线麻豆视频| 超碰中文在线| 国产高清不卡| 色综合视频一区二区三区44| 欧美a级大片在线| 天天操综合520| 色乱码一区二区三区网站| 欧洲杯什么时候开赛| 久久精品久久久| 国产一区二区三区久久| 日韩福利电影在线| 国产精品69毛片高清亚洲| 91色porny在线视频| 亚洲色图欧洲色图| 疯狂做受xxxx高潮欧美日本| 91福利区一区二区三区| 91精选在线观看| 精品亚洲一区二区三区四区五区| 国产视频精品在线| 久久久久久国产| 91免费在线视频| 日韩免费av一区二区三区| 欧美中文字幕在线观看视频| 中文久久久久久| 在线香蕉视频| 日本资源在线| 四虎影视国产精品| 免费av一区| 国产婷婷精品| 成人晚上爱看视频| 一区二区不卡在线视频 午夜欧美不卡在| 欧美性猛交xxxx富婆弯腰| 欧美一级久久久久久久大片| 亚洲天堂免费在线| 性色av香蕉一区二区| 91九色极品视频| 久久精品国产精品亚洲精品色| 99福利在线观看| 在线观看国产高清视频| 精精国产xxxx视频在线中文版| 宅男噜噜噜66国产精品免费| 精品国产中文字幕第一页 | 国产美女视频一区二区三区| 草草视频在线观看| 99久久香蕉| 伊人久久婷婷| 国产酒店精品激情| 亚洲丝袜制服诱惑| 欧美一区二区精美| 久久综合伊人77777| 亚洲自拍欧美另类| 日本美女爱爱视频| 特黄国产免费播放| 24小时免费看片在线观看 | xxxx69视频| 成人在线直播| 亚洲综合色婷婷在线观看| 韩国av一区| 久久久99精品久久| 欧美色精品天天在线观看视频|