Java實現(xiàn)分頁

一洲赵、limit關(guān)鍵字

service層

@Service

@Transactional

public class ImplStudentService implements StudentService {

@Resource

private? StudentDao? studentDao;

? ? @Override

? ? public List<Student>? selectAllStudent(String province, Integer offset, Integer limit) {

? ? ? ? return studentDao.selectAll(province,offset,limit);

? ? }

}

sql語句

select * from student where province = #{province} limit #{offset},#{limit}

二、hibernate分頁

service層

@Override

? public List getStudents(Integer? pageNo璃岳,Integer? pageSize) throws Exception {

? // 分頁數(shù)據(jù)

? int[] startIdAndCount = new int[2];

? startIdAndCount[0] = pageNo * pageSize;

? startIdAndCount[1] = pageSize;

? return studentDao.selectStudentsByPage(startIdAndCount);

}

dao層

@Override

public List findByHqlPage(int[] startIdAndCount) throws Exception {

String hql = "...";

try {

Query query = getSession().createQuery(hql);

// 設(shè)置分頁

if (startIdAndCount != null && startIdAndCount.length > 0) {

int rowStartIdx = Math.max(0, startIdAndCount[0]);

if (rowStartIdx > 0) {

query.setFirstResult(rowStartIdx);// 設(shè)置開始取值的索引

}

if (startIdAndCount.length > 1) {

int rowCount = Math.max(0, startIdAndCount[1]);

if (rowCount > 0) {

query.setMaxResults(rowCount);// 設(shè)置結(jié)束取值的索引

}

}

}

return query.list();

} catch (RuntimeException re) {

log.error("分頁查詢失敻恕住涉!", re);

throw re;

}

}

三裆站、截取List查詢結(jié)果分頁(簡單粗暴)

...

List<StudentEnroll> students = studentlDao.getAllStudents();

int count = 0;

if(studentEnrolls != null && studentEnrolls.size() > 0) {

count = studentEnrolls.size();

int fromIndex = pageNo * pageSize;

int toIndex = (pageNo + 1) * pageSize;

if(toIndex > count) {

toIndex = count;

}

List<StudentEnroll> pageList = studentEnrolls.subList(fromIndex, toIndex);

...

————————————————

四、mybatis框架pageHelper插件分頁

Spring整合:

導(dǎo)入pom.xml

<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->

<dependency>

? ? ? <groupId>com.github.pagehelper</groupId>

? ? ? <artifactId>pagehelper</artifactId>

? ? ? <version>5.1.2</version>

</dependency>

配置項目配置文件(我在spring和mybatis整合的配置文件中配置的精盅,如果在mybatis核心配置文件中配置,百度一下)

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

? ? ? ? <!-- 依賴數(shù)據(jù)源 -->

? ? ? ? <property name="dataSource" ref="dataSource"/>

? ? ? ? <!-- 注冊加載myBatis映射文件 -->

? ? ? ? <property name="mapperLocations">

? ? ? ? ? ? <array>

? ? ? ? ? ? ? ? <value>classpath*:com/yyz/mapper/*Mapper.xml</value>

? ? ? ? ? ? </array>

? ? ? ? </property>

? ? ? ? <!-- PageHelper分頁配置 -->

? ? ? ? <property name="plugins">

? ? ? ? ? ? <array>

? ? ? ? ? ? ? ? <bean class="com.github.pagehelper.PageInterceptor">

? ? ? ? ? ? ? ? ? ? <property name="properties">

? ? ? ? ? ? ? ? ? ? ? ? <!--使用下面的方式配置參數(shù)谜酒,一行配置一個叹俏,后面會有所有的參數(shù)介紹 -->

? ? ? ? ? ? ? ? ? ? ? ? <value>

? ? ? ? ? ? ? ? ? ? <!--helperDialect屬性來指定分頁插件使用哪種方言。-->

? ? ? ? ? ? ? ? ? ? ? ? ? ? helperDialect=mysql

? ? ? ? ? ? ? ? ? ? <!--分頁合理化參數(shù)僻族,設(shè)置為true時粘驰,pageNum<=0時會查詢第一頁,pageNum>pages(超過總數(shù)時),會查詢最后一頁。-->

? ? ? ? ? ? ? ? ? ? ? ? ? ? reasonable=true

? ? ? ? ? ? ? ? ? ? <!--為了支持startPage(Object params)方法述么,增加了該參數(shù)來配置參數(shù)映射蝌数,用于從對象中根據(jù)屬性名取值,

? ? ? ? ? ? ? ? ? ? ? ? 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable-->

? ? ? ? ? ? ? ? ? ? ? ? ? ? params=count=countSql

? ? ? ? ? ? ? ? ? ? <!--支持通過Mapper接口參數(shù)來傳遞分頁參數(shù)碉输,默認(rèn)值false籽前,分頁插件會從查詢方法的參數(shù)值中,自動根據(jù)上面 params 配

? ? ? ? ? ? ? ? ? ? 置的字段中取值敷钾,查找到合適的值時就會自動分頁枝哄。-->

? ? ? ? ? ? ? ? ? ? ? ? ? ? supportMethodsArguments=true

? ? ? ? ? ? ? ? ? ? <!--默認(rèn)值為 false。設(shè)置為 true 時阻荒,允許在運行時根據(jù)多數(shù)據(jù)源自動識別對應(yīng)方言的分頁-->

? ? ? ? ? ? ? ? ? ? ? ? ? ? autoRuntimeDialect=true

? ? ? ? ? ? ? ? ? ? ? ? </value>

? ? ? ? ? ? ? ? ? ? </property>

? ? ? ? ? ? ? ? </bean>

? ? ? ? ? ? </array>

? ? ? ? </property>

? ? ? ? <!-- 給數(shù)據(jù)庫實體起別名 -->

? ? ? ? <property name="typeAliasesPackage" value="com.yyz.entity;"/>

</bean>

————————————————

SpringBoot整合:

<!--分頁插件-->

<dependency>

? ? <groupId>com.github.pagehelper</groupId>

? ? <artifactId>pagehelper-spring-boot-starter</artifactId>

? ? <version>最新版本</version>

</dependency>

配置項目application.yml文件

#bybatis分頁插件配置

pagehelper:?

????????helper-dialect: mysql #數(shù)據(jù)庫?

????????reasonable: true?

????????support-methods-arguments: true?

????????params: count=countSql

標(biāo)題分頁插件參數(shù):分頁插件提供了多個可選參數(shù)挠锥,這些參數(shù)使用時,按照上面配置方式中的示例配置即可侨赡。分頁插件可選參數(shù)如下:

dialect:默認(rèn)情況下會使用 PageHelper 方式進行分頁蓖租,如果想要實現(xiàn)自己的分頁邏輯,可以實現(xiàn)Dialect(com.github.pagehelper.Dialect) 接口羊壹,然后配置該屬性為實現(xiàn)類的全限定名稱蓖宦。 使用自定義dialect 實現(xiàn)時,下面的參數(shù)沒有任何作用油猫。

helperDialect:分頁插件會自動檢測當(dāng)前的數(shù)據(jù)庫鏈接稠茂,自動選擇合適的分頁方式。oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby特別注意:使用 SqlServer2012 數(shù)據(jù)庫時情妖,需要手動指定為 sqlserver2012睬关,否則會使用 SqlServer2005的方式進行分頁。

offsetAsPageNum:默認(rèn)值為 false毡证,該參數(shù)對使用 RowBounds 作為分頁參數(shù)時有效电爹。 當(dāng)該參數(shù)設(shè)置為 true時,會將 RowBounds 中的 offset 參數(shù)當(dāng)成 pageNum 使用料睛,可以用頁碼和頁面大小兩個參數(shù)進行分頁丐箩。

rowBoundsWithCount:默認(rèn)值為false摇邦,該參數(shù)對使用 RowBounds 作為分頁參數(shù)時有效。當(dāng)該參數(shù)設(shè)置為true時雏蛮,使用 RowBounds 分頁會進行 count 查詢涎嚼。

pageSizeZero:默認(rèn)值為 false,當(dāng)該參數(shù)設(shè)置為 true 時挑秉,如果 pageSize=0 或者RowBounds.limit = 0 就會查詢出全部的結(jié)果(相當(dāng)于沒有執(zhí)行分頁查詢法梯,但是返回結(jié)果仍然是 Page 類型)。

reasonable:分頁合理化參數(shù)犀概,默認(rèn)值為false立哑。當(dāng)該參數(shù)設(shè)置為 true 時,pageNum<=0時會查詢第一頁姻灶,pageNum>pages(超過總數(shù)時)铛绰,會查詢最后一頁。默認(rèn)false 時产喉,直接根據(jù)參數(shù)進行查詢捂掰。

params:為了支持startPage(Object params)方法,增加了該參數(shù)來配置參數(shù)映射曾沈,用于從對象中根據(jù)屬性名取值这嚣,可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默認(rèn)值塞俱,默認(rèn)值為pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero姐帚。

supportMethodsArguments:支持通過 Mapper接口參數(shù)來傳遞分頁參數(shù),默認(rèn)值false障涯,分頁插件會從查詢方法的參數(shù)值中罐旗,自動根據(jù)上面 params配置的字段中取值,查找到合適的值時就會自動分頁唯蝶。

aggregateFunctions:默認(rèn)為所有常見數(shù)據(jù)庫的聚合函數(shù)九秀,允許手動添加聚合函數(shù)(影響行數(shù)),所有以聚合函數(shù)開頭的函數(shù)粘我,在進行count 轉(zhuǎn)換時鼓蜒,會套一層。其他函數(shù)和列會被替換為 count(0)涂滴,其中count列可以自己配置。

重要提示:

當(dāng) offsetAsPageNum=false 的時候晴音,由于 PageNum 問題柔纵,RowBounds查詢的時候 reasonable 會強制為 false。使用 PageHelper.startPage 方法不受影響锤躁。

service層

@Override

public ResponseResult selectAllStudent(Integer pageNum, Integer pageSize) {

? ? Map<String,Object> map = new HashMap<>();

? ? PageHelper.startPage(pageNum,pageSize);

? ? List<Student>? students = studentMapper.selectAllStudents();

? ? PageInfo pageInfo = new PageInfo(students);

? ? long total = pageInfo.getTotal();

? ? map.put("result",pageInfo);

? ? map.put("count",total);

? ? return ResponseResultUtil.success(map);

}

詳細請看?SpringBoot集成MyBatis的分頁插件PageHelper

五搁料、springData分頁

service層

...

Sort.Order travelDate = new Sort.Order(Sort.Direction.DESC, "travelDate");

Sort.Order createdTime = new Sort.Order(Sort.Direction.DESC, "createdTime");

Sort sort = new Sort(travelDate, createdTime);

Pageable pageable = new PageRequest(page, pageSize, sort);

List<TravelItem> items = null;

try {

? ? items = travelRepository.getTravelItemsByTravelDateBetweenAndUserId(theStartDate, theEndDate, openId, pageable);

} catch (Exception e) {

? ? throw new DatabaseRelatedException("TravelRepository異常");

}

...

dao層:接口繼承的是PagingAndSortingRepository接口,注意要加@Repository注解


來自:

https://blog.csdn.net/riemann_/article/details/90454331

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市郭计,隨后出現(xiàn)的幾起案子霸琴,更是在濱河造成了極大的恐慌,老刑警劉巖昭伸,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梧乘,死亡現(xiàn)場離奇詭異,居然都是意外死亡庐杨,警方通過查閱死者的電腦和手機选调,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灵份,“玉大人仁堪,你說我怎么就攤上這事√钋” “怎么了弦聂?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長氛什。 經(jīng)常有香客問我莺葫,道長,這世上最難降的妖魔是什么屉更? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任徙融,我火速辦了婚禮,結(jié)果婚禮上瑰谜,老公的妹妹穿的比我還像新娘欺冀。我一直安慰自己,他們只是感情好萨脑,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布隐轩。 她就那樣靜靜地躺著,像睡著了一般渤早。 火紅的嫁衣襯著肌膚如雪职车。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天鹊杖,我揣著相機與錄音悴灵,去河邊找鬼。 笑死骂蓖,一個胖子當(dāng)著我的面吹牛积瞒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播登下,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茫孔,長吁一口氣:“原來是場噩夢啊……” “哼叮喳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缰贝,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤馍悟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后剩晴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锣咒,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年李破,在試婚紗的時候發(fā)現(xiàn)自己被綠了宠哄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嗤攻,死狀恐怖毛嫉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妇菱,我是刑警寧澤承粤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站闯团,受9級特大地震影響辛臊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜房交,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一彻舰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧候味,春花似錦刃唤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至帜慢,卻和暖如春笼裳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粱玲。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工躬柬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抽减。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓允青,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胯甩。 傳聞我的和親對象是個殘疾皇子昧廷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

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