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 第二步...