Mybatis分頁中遇到的坑2

2022-01-21 18:57:48 字數 1633 閱讀 1817

站在巨人的肩膀上

mybatis一對多巢狀查詢和分頁

類似的需求有很多,比如經典的乙個使用者有n個角色,乙個角色有n個許可權,那麼通過使用者的id來查詢角色和許可權資料等等。

至於分頁外掛程式,無論是mybatis-pagehelper還是mybatis-plus都可以輔助,這裡主要記錄不同查詢方式對分頁的影響。

先展示結果:

copy,,]

},,,]

}]

}}

product用於資料庫對映,為了保持其簡潔,其他的二次封裝不在product裡進行,而用繼承的方式。

定義模型productvo

copy@data

public class productvo extends product

copy

select

p.id,

p.name,

p.code,

...i.id images_id,

i.product_id images_product_id,

...from products p

inner join product_images i on p.id = i.product_id

where p.category_id = #

select>

定義productslistmap結果對映

copy-->

resultmap>

注意:

總結

優點

缺點

比如想查page=1,limit=10的資料,本來期望的是查詢出10個商品,然後這10個商品分別再巢狀查詢出自己的商品集合。但是會發現,可能商品只有兩三個,每個下面都帶了自己的商品集合。

原因:先通過表連線把錶記錄關聯進來了,如果有3個商品,關聯表之後每個商品有4條記錄,那麼其實這時候雖然只有三個商品,但是這個記憶體中的臨時表已經有12條記錄了,在語句的最後加上 limit 0,10,其實分頁的時候分的是這12條記錄。最終就會導致最終的對映結果只出現了3個商品,而非我們期望的10個商品。

copy

select

from products

where category_id = #

select>

定義productslistmap結果對映

copy

collection>

resultmap>

注意:

copy

select

from product_images

where product_id = #

select>

總結

優點

缺點

mybatis中變數遇到的變數對應的坑

將integer型別的變數存入mysql資料庫中 例如mybatis中有如下的條件修改,number為interger型別的變數 number 你會發現,唯獨number 0時,資料庫不會做相應的更新動作,其他任何number都沒有問題,對應的應該修改如下 去掉number 這個條件 number ...

pageHeler遇到的坑分頁問題

1 在微服務裡面做查詢介面,用到pagehelper,資料庫只有8行資料,pagenum 1 pagesize 10,pagenum 2 pagesize 10,pagenum 3 pagesize 10。返回的資料都是那8條。原因 這是pagehelper裡面自帶的乙個功能,叫做reasonabl...

使用mybatis過程中遇到的坑以及外掛程式

string型別的資料比較 陣列 時間格式比較 注意傳值不同時的不同判斷為空方式 etc 我曾七次鄙視自己的靈魂 第一次,當它本可進取時,卻故作謙卑 第二次,當它空虛時,用愛慾來填充 第三次,在困難和容易之間,它選擇了容易 第四次,它犯了錯,卻借由別人也會犯錯來寬慰自己 第五次,它自由軟弱,卻把它認...