Mybatis關聯結果查詢分頁方法

#在Mybatis分頁插件的說明中有以下內容 ##不支持的狀況html

對於關聯結果查詢,使用分頁得不到正常的結果,由於只有把數據所有查詢出來,才能獲得最終的結果,對這個結果進行分頁纔有效。於是若是是這種狀況,必然要先所有查詢,在對結果處理,這樣就體現不出分頁的做用了。git

對於關聯嵌套查詢,使用分頁的時候,只會對主SQL進行分頁查詢,嵌套的查詢不會被分頁。sql

##對於不支持狀況mybatis

  • 在Mybatis中沒有任何簡單的分頁能實現該功能
  • 即便Mybatis的內存分頁也不能實現關聯結果查詢的分頁

##若是你不瞭解關聯結果查詢和關聯嵌套查詢
能夠查看該專題進行了解。.net

##如何對關聯結果進行分頁?插件

  • 針對這種狀況最好的方法就是手寫分頁,針對主要語句進行分頁,對鏈接的表不進行分頁查詢
  • 針對主要語句寫count查詢(不須要管鏈接的表)
  • 這樣一來,對嵌套的結果就沒有影響了

##簡單舉例以下code

<!-- lang: sql -->
select *
  from (select *
          from (select a.*, rownum rw from sys_role a where rownum <= 4)
         where rw > 0) a
  left join sys_role_function b on a.roleid = b.roleid;

這條語句分頁限制爲0到4,主分頁語句限制爲4條結果,實際結果是左鏈接後的結果,不止4條。
使用這種針對性的分頁sql就能解決關聯結果查詢的問題。htm

##關於關聯嵌套查詢
嵌套查詢因爲都是獨立的sql,主sql和分支sql都是分離的,因此使用Mybatis分頁插件能夠正常分頁。若是你還想對關聯查詢的分支sql進行分頁查詢,基本上是不可能的,可是經過column={}這種方式傳遞分頁參數也能實現,估計有些人看不懂這裏了,就到此爲止吧,不須要作這麼費力不討好的事。blog

##Mybatis分頁插件地址:http://git.oschina.net/free/Mybatis_PageHelper內存

相關文章
相關標籤/搜索