Mybatis分頁外掛程式PageHelper簡單使用

2021-08-27 03:14:36 字數 2370 閱讀 7598

mybatis分頁外掛程式pagehelper簡單使用

乙個好的講解mybatis的部落格位址

引言對於使用mybatis時,最頭痛的就是寫分頁,需要先寫乙個查詢count的select語句,然後再寫乙個真正分頁查詢的語句,當查詢條件多了之後,會發現真不想花雙倍的時間寫count和select,

如下就是專案在沒有使用分頁外掛程式的時候的語句

複製**

select count(*) from help_assist_student

and stu_id like

concat(concat('%',

#),'%')

and name like

concat(concat('%',

#),'%')

and dept_id in

#and bank_name in

#select * from help_assist_student

and stu_id like

concat(concat('%',

#),'%')

and name like

concat(concat('%',

#),'%')

and dept_id in

#and bank_name in

#order by dept_id,stu_id

limit #,#

複製**

可以發現,重複的**太多,雖然說複製貼上簡單的很,但是檔案的長度在成倍的增加,以後翻閱**的時候頭都能大了。

於是希望只寫乙個select語句,count由外掛程式根據select語句自動完成。找啊找啊,發現pagehelper 符合要求,於是就簡單的寫了乙個測試專案

1,配置分頁外掛程式:

直接從官網上copy的如下:

複製**

config pagehelper

1. using in mybatis-config.xml

config org.mybatis.spring.sqlsessionfactorybean as following:

param1=value1

複製**

我使用第一中方法:

複製**

複製**

其餘的關於mybatis整合spring的內容就不用提了。

測試工程就不複雜了,簡單的查詢乙個表,沒有條件

select *

from doc

order by doc_abstract

public listselectbypageandselections();

3,分頁

複製**

@service

public class docserviceimpl implements idocservice

}複製**

參考文件說明,我使用了pagehelper.startpage(currentpage, pagesize);

其實一開始看到這段**時候,我覺得應該是記憶體分頁。其實外掛程式對mybatis執行流程進行了增強,新增了limit以及count查詢,屬於物理分頁

再貼上一下文件說明中的一段話

複製**

4. 什麼時候會導致不安全的分頁?

pagehelper 方法使用了靜態的 threadlocal 引數,分頁引數和執行緒是繫結的。

只要你可以保證在 pagehelper 方法呼叫後緊跟 mybatis 查詢方法,這就是安全的。因為 pagehelper 在 finally **段中自動清除了 threadlocal 儲存的物件。

但是如果你寫出下面這樣的**,就是不安全的用法:

pagehelper.startpage(1, 10);

listlist;

if(param1 != null) else

這種情況下由於 param1 存在 null 的情況,就會導致 pagehelper 生產了乙個分頁引數,但是沒有被消費,這個引數就會一直保留在這個執行緒上。當這個執行緒再次被使用時,就可能導致不該分頁的方法去消費這個分頁引數,這就產生了莫名其妙的分頁。

上面這個**,應該寫成下面這個樣子:

listlist;

if(param1 != null) else

這種寫法就能保證安全。

如果你對此不放心,你可以手動清理 threadlocal 儲存的分頁引數,可以像下面這樣使用:

listlist;

if(param1 != null) finally

} else

這麼寫很不好看,而且沒有必要。

複製**

4,結果

controller層中簡單的呼叫然後返回json字串如下:可以看出,結果基於doc_abstract排序後返回1-10條的資料

mybatis分頁外掛程式

其實吧,這個分頁的封裝是我從mybatis實戰上抄的,然後又重構了下 形成了自己的。現在之所以會記錄一下,主要原因是出現了質變 對foreach的支援,而解決這個問題的過程中,我感覺,應該基本上使用上沒有多少侷限行了。下面說說實際的吧。基本的設計思路,是使用mybatis外掛程式,首先是下面這一串註...

mybatis 分頁外掛程式

pagehelper 是國內非常優秀的一款開源的mybatis分頁外掛程式 支援任何複雜的單錶 多表分頁。它支援基本主流與常用的資料庫,例如mysql oracle db2 sqlite hsqldb等。本文主要使用的是mysql和pagehelper方法的呼叫 使用pagehelper之後我們就可...

Mybatis分頁外掛程式 PageHelper

如果你也在用mybatis,建議嘗試該分頁外掛程式,這個一定是最方便使用的分頁外掛程式。該外掛程式目前支援oracle,mysql,mariadb,sqlite,hsqldb,postgresql六種資料庫分頁。第一步 在mybatis配置 xml中配置 外掛程式 1 2 3 4 5 6 7 第二步...