在web開發(fā)過程中涉及到表格時,例如dataTable栗竖,就會產(chǎn)生分頁的需求,通常我們將分頁方式分為兩種:前端分頁和后端分頁。
前端分頁
一次性請求數(shù)據(jù)表格中的所有記錄(ajax)业踏,然后在前端緩存并且計算count和分頁邏輯,一般前端組件(例如dataTable)會提供分頁動作涧卵。
特點是:簡單勤家,很適合小規(guī)模的web平臺;當(dāng)數(shù)據(jù)量大的時候會產(chǎn)生性能問題柳恐,在查詢和網(wǎng)絡(luò)傳輸?shù)臅r間會很長伐脖。
后端分頁
在ajax請求中指定頁碼(pageNum)和每頁的大小(pageSize)热幔,后端查詢出當(dāng)頁的數(shù)據(jù)返回,前端只負(fù)責(zé)渲染讼庇。
特點是:復(fù)雜一些绎巨;性能瓶頸在MySQL的查詢性能,這個當(dāng)然可以調(diào)優(yōu)解決蠕啄。一般來說场勤,web開發(fā)使用的是這種方式。
我們說的也是后端分頁歼跟。
MySQL對分頁的支持
簡單來說MySQL對分頁的支持是通過limit子句和媳。請看下面的例子。
limit關(guān)鍵字的用法是
LIMIT [offset,] rows
offset是相對于首行的偏移量(首行是0)哈街,rows是返回條數(shù)留瞳。
# 每頁10條記錄,取第一頁骚秦,返回的是前10條記錄select* from tableA limit0,10;
# 每頁10條記錄她倘,取第二頁,返回的是第11條記錄作箍,到第20條記錄硬梁,select* from tableA limit10,10;
這里提一嘴的是,MySQL在處理分頁的時候是這樣的:
limit 1000,10 - 過濾出1010條數(shù)據(jù)胞得,然后丟棄前1000條靶溜,保留10條。當(dāng)偏移量大的時候懒震,性能會有所下降罩息。
limit 100000,10 - 會過濾10w+10條數(shù)據(jù),然后丟棄前10w條个扰。如果在分頁中發(fā)現(xiàn)了性能問題瓷炮,可以根據(jù)這個思路調(diào)優(yōu)。
Mybatis分頁插件PageHelper
在使用Java Spring開發(fā)的時候递宅,Mybatis算是對數(shù)據(jù)庫操作的利器了娘香。不過在處理分頁的時候,Mybatis并沒有什么特別的方法办龄,一般需要自己去寫limit子句實現(xiàn)烘绽,成本較高。好在有個PageHelper插件俐填。
1安接、POM依賴
Mybatis的配置就不多提了。PageHelper的依賴如下英融。需要新的版本可以去maven上自行選擇
1
2
3
4
5
com.github.pagehelper
pagehelper
4.1.4
2盏檐、Mybatis對PageHelper的配置
打開Mybatis配置文件歇式,一般在Resource路徑下。我這里叫mybatis-config.xml胡野。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43