mybatis是如何分頁的,分頁插件的原理是什么

1. SQL 分頁

<select id="queryStudentsBySql" parameterType="map" resultMap="studentmapper">?

? ? ? ? ? ?select * from student limit #{currIndex} , #{pageSize}

</select>

2. 使用攔截器分頁

創(chuàng)建攔截器翼闽,攔截mybatis接口方法id以ByPage結(jié)束的語句

? ? ? ? ?String sql = (String) MetaObjectHandler.getValue("delegate.boundSql.sql");

? ? ? ? ? ? //也可以通過statementHandler直接獲取

? ? ? ? ? ? //sql = statementHandler.getBoundSql().getSql();

? ? ? ? ? ? //構(gòu)建分頁功能的sql語句? ? ? ? ? ? String limitSql;

? ? ? ? ? ? sql = sql.trim();

? ? ? ? ? ? limitSql = sql + " limit " + (currPage - 1) * pageSize + "," + pageSize;

? ? ? ? ? ? //將構(gòu)建完成的分頁sql語句賦值個體'delegate.boundSql.sql',偷天換日? ? ? ? ? ?MetaObjectHandler.setValue("delegate.boundSql.sql", limitSql);



<configuration>

? ? ? <plugins>

? ? ? ? ? ? ? ? ? ?<plugin interceptor="com.autumn.interceptor.MyPageInterceptor">

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<property name="limit" value="10"/>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<property name="dbType" value="mysql"/>

? ? ? ? ? ? ? ? ? </plugin>

? ? ? ? ? </plugins>

</configuration>


通過自定義插件的形式實現(xiàn)分頁洲炊,也是最好的感局,也叫做分頁攔截器尼啡。實現(xiàn)步驟如下:

插件支持MySQL和Oracle兩種數(shù)據(jù)庫,通過方法名關(guān)鍵字ListPage去匹配询微,有才進(jìn)行分頁處理崖瞭,并且不用在Mapping中寫分頁代碼。

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

? ? <typeAliases>

? ? ? ? <typeAlias alias="PageInfo" type="com.jsoft.testmybatis.util.PageInfo" />

? ? </typeAliases>

? ? <plugins>

? ? ? ? <plugin interceptor="com.jsoft.testmybatis.util.PagePlugin">

? ? ? ? ? ? <property name="dialect" value="mysql" />

? ? ? ? ? ? <property name="pageSqlId" value=".*ListPage.*" />

? ? ? ? </plugin>

? ? </plugins>

</configuration>





3. RowBounds分頁

Mybatis使用RowBounds對象進(jìn)行分頁撑毛,它是針對ResultSet結(jié)果集執(zhí)行的內(nèi)存分頁书聚,而非物理分頁,可以在sql內(nèi)直接書寫帶有物理分頁的參數(shù)來完成物理分頁功能代态,也可以使用分頁插件來完成物理分頁寺惫。


數(shù)據(jù)量小時,RowBounds不失為一種好辦法蹦疑。但是數(shù)據(jù)量大時西雀,實現(xiàn)攔截器就很有必要了。

mybatis接口加入RowBounds參數(shù)

(1)Dao:

? ? ?public List?queryUsersByPage(String userName, RowBounds rowBounds);

(2)Service:

@Override

? ? @Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.SUPPORTS)

? ? publicList queryRolesByPage(String roleName,intstart,int limit) {

? ? ? ? returnroleDao.queryRolesByPage(roleName,new RowBounds(start, limit));

? ? }



分頁插件的基本原理是使用Mybatis提供的插件接口歉摧,實現(xiàn)自定義插件艇肴,在插件的攔截方法內(nèi)攔截待執(zhí)行的sql,然后重寫sql叁温,根據(jù)dialect方言再悼,添加對應(yīng)的物理分頁語句和物理分頁參數(shù)。

舉例:select * from student膝但,攔截sql后重寫為:select t.* from (select * from student)t?limit 0冲九,10

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市跟束,隨后出現(xiàn)的幾起案子莺奸,更是在濱河造成了極大的恐慌,老刑警劉巖冀宴,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灭贷,死亡現(xiàn)場離奇詭異,居然都是意外死亡略贮,警方通過查閱死者的電腦和手機(jī)甚疟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逃延,“玉大人览妖,你說我怎么就攤上這事≌嬗眩” “怎么了黄痪?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盔然。 經(jīng)常有香客問我桅打,道長,這世上最難降的妖魔是什么愈案? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任挺尾,我火速辦了婚禮,結(jié)果婚禮上站绪,老公的妹妹穿的比我還像新娘遭铺。我一直安慰自己,他們只是感情好恢准,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布魂挂。 她就那樣靜靜地躺著,像睡著了一般馁筐。 火紅的嫁衣襯著肌膚如雪涂召。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天敏沉,我揣著相機(jī)與錄音果正,去河邊找鬼。 笑死盟迟,一個胖子當(dāng)著我的面吹牛秋泳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播攒菠,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼迫皱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辖众?” 一聲冷哼從身側(cè)響起卓起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赵辕,沒想到半個月后既绩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡还惠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年饲握,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚕键。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡救欧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锣光,到底是詐尸還是另有隱情笆怠,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布誊爹,位于F島的核電站蹬刷,受9級特大地震影響瓢捉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜办成,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一泡态、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迂卢,春花似錦某弦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至员萍,卻和暖如春腾降,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背充活。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工蜂莉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人混卵。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓映穗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幕随。 傳聞我的和親對象是個殘疾皇子蚁滋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容