激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Spring Data Jpa實(shí)現(xiàn)分頁和排序代碼實(shí)例

Spring Data Jpa實(shí)現(xiàn)分頁和排序代碼實(shí)例

2020-08-30 11:19天碼營David的博客 Java教程

本篇文章主要介紹了spring data jpa實(shí)現(xiàn)分頁和排序代碼實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。

之前我們學(xué)習(xí)了如何使用Jpa訪問關(guān)系型數(shù)據(jù)庫。通過Jpa大大簡化了我們對數(shù)據(jù)庫的開發(fā)工作。但是,之前的例子中我們只提到了最簡單的CRUD(增刪改查)操作。實(shí)際上,Spring Data Jpa對于分頁以及排序的查詢也有著完美的支持,接下來,我們來學(xué)習(xí)如何通過Pageable來對數(shù)據(jù)庫進(jìn)行分頁查詢。

添加maven依賴

首先我們需要引入Jpa,數(shù)據(jù)庫直接使用hsqldb內(nèi)存數(shù)據(jù)庫就可以了:

?
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
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelversion>4.0.0</modelversion>
 <parent>
  <groupid>org.springframework.boot</groupid>
  spring-boot-starter-parent</artifactid>
  <version>1.2.5.RELEASE</version>
 </parent>
 <groupid>tmy</groupid>
 demo.jpa.page</artifactid>
 <version>0.0.1-SNAPSHOT</version>
 <name>tmy-spring-jpa-page-demo</name>
 
 <dependencies>
  <dependency>
   <groupid>org.springframework.boot</groupid>
   spring-boot-starter-web</artifactid>
  </dependency>
  <dependency>
   <groupid>org.springframework.boot</groupid>
   spring-boot-starter-data-jpa</artifactid>
  </dependency>
  <dependency>
   <groupid>org.hsqldb</groupid>
   hsqldb</artifactid>
   <scope>runtime</scope>
  </dependency>
 </dependencies>
</project>

繼承PagingAndSortingRepository

Jpa的基本使用方法在如何使用Jpa訪問關(guān)系型數(shù)據(jù)庫已經(jīng)介紹過,我們暫且跳過,這里我們直接來看接口BlogRepository的定義:

?
1
2
3
4
5
public interface BlogRepository extends PagingAndSortingRepository {
 
 Page findByDeletedFalse(Pageable pageable);
 
}

我們可以看到,BlogRepository定義了這樣一個方法:Page findByDeletedFalse(Pageable pageable);,我們主要關(guān)注它的參數(shù)以及返回值。

Pageable 是Spring Data庫中定義的一個接口,該接口是所有分頁相關(guān)信息的一個抽象,通過該接口,我們可以得到和分頁相關(guān)所有信息(例如pageNumber、pageSize等),這樣,Jpa就能夠通過pageable參數(shù)來得到一個帶分頁信息的Sql語句。
Page類也是Spring Data提供的一個接口,該接口表示一部分?jǐn)?shù)據(jù)的集合以及其相關(guān)的下一部分?jǐn)?shù)據(jù)、數(shù)據(jù)總數(shù)等相關(guān)信息,通過該接口,我們可以得到數(shù)據(jù)的總體信息(數(shù)據(jù)總數(shù)、總頁數(shù)...)以及當(dāng)前數(shù)據(jù)的信息(當(dāng)前數(shù)據(jù)的集合、當(dāng)前頁數(shù)等)
Spring Data Jpa除了會通過命名規(guī)范幫助我們擴(kuò)展Sql語句外,還會幫助我們處理類型為Pageable的參數(shù),將pageable參數(shù)轉(zhuǎn)換成為sql'語句中的條件,同時,還會幫助我們處理類型為Page的返回值,當(dāng)發(fā)現(xiàn)返回值類型為Page,Spring Data Jpa將會把數(shù)據(jù)的整體信息、當(dāng)前數(shù)據(jù)的信息,分頁的信息都放入到返回值中。這樣,我們就能夠方便的進(jìn)行個性化的分頁查詢。

Pageable只是一個抽象的接口,那么,家下來我們學(xué)習(xí)如何獲得pageable對象。

通過參數(shù)生成Pageable對象

Pageable定義了很多方法,但其核心的信息只有兩個:一是分頁的信息(page、size),二是排序的信息。Spring Data Jpa提供了PageRequest的具體實(shí)現(xiàn),我們只提供分頁以及排序信息即可:

?
1
2
3
4
5
6
7
@RequestMapping(value = "/params", method=RequestMethod.GET)
public Page getEntryByParams(@RequestParam(value = "page", defaultValue = "0") Integer page,
  @RequestParam(value = "size", defaultValue = "15") Integer size) {
 Sort sort = new Sort(Direction.DESC, "id");
 Pageable pageable = new PageRequest(page, size, sort);
 return blogRepository.findAll(pageable);
}

在這里,我們通過參數(shù)獲得分頁的信息,并通過Sort以及Direction告訴pageable需要通過id逆序排列。

這里可以看到,通過參數(shù)來得到一個pageable對象還是比較繁瑣的,當(dāng)查詢的方法比較多的時候,會產(chǎn)生大量的重復(fù)代碼。為了避免這種情況,Spring Data提供了直接生成pageable的方式。

直接獲取Pageable對象

?
1
2
3
4
5
@RequestMapping(value = "", method=RequestMethod.GET)
public Page getEntryByPageable(@PageableDefault(value = 15, sort = { "id" }, direction = Sort.Direction.DESC)
 Pageable pageable) {
 return blogRepository.findAll(pageable);
}

我們可以看到,我們只需要在方法的參數(shù)中直接定義一個pageable類型的參數(shù),當(dāng)Spring發(fā)現(xiàn)這個參數(shù)時,Spring會自動的根據(jù)request的參數(shù)來組裝該pageable對象,Spring支持的request參數(shù)如下:

page,第幾頁,從0開始,默認(rèn)為第0頁

size,每一頁的大小,默認(rèn)為20

sort,排序相關(guān)的信息,以property,property(,ASC|DESC)的方式組織,例如sort=firstname&sort=lastname,desc表示在按firstname正序排列基礎(chǔ)上按lastname倒序排列

這樣,我們就可以通過url的參數(shù)來進(jìn)行多樣化、個性化的查詢,而不需要為每一種情況來寫不同的方法了。

通過url來定制pageable很方便,但唯一的缺點(diǎn)是不太美觀,因此我們需要為pageable設(shè)置一個默認(rèn)配置,這樣很多情況下我們都能夠通過一個簡潔的url來獲取信息了。

Spring提供了@PageableDefault幫助我們個性化的設(shè)置pageable的默認(rèn)配置。例如@PageableDefault(value = 15, sort = { "id" }, direction = Sort.Direction.DESC)表示默認(rèn)情況下我們按照id倒序排列,每一頁的大小為15。

返回結(jié)果

最后,讓我們進(jìn)入程序的根目錄,運(yùn)行命令mvn spring-boot:run將web應(yīng)用啟動起來,啟動完成后,訪問[http://localhost:8080/](http://localhost:8080/)頁面,我們將看到如下結(jié)果:

?
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
{
 "content":[
 {"id":123,"title":"blog122","content":"this is blog content"},
 {"id":122,"title":"blog121","content":"this is blog content"},
 {"id":121,"title":"blog120","content":"this is blog content"},
 {"id":120,"title":"blog119","content":"this is blog content"},
 {"id":119,"title":"blog118","content":"this is blog content"},
 {"id":118,"title":"blog117","content":"this is blog content"},
 {"id":117,"title":"blog116","content":"this is blog content"},
 {"id":116,"title":"blog115","content":"this is blog content"},
 {"id":115,"title":"blog114","content":"this is blog content"},
 {"id":114,"title":"blog113","content":"this is blog content"},
 {"id":113,"title":"blog112","content":"this is blog content"},
 {"id":112,"title":"blog111","content":"this is blog content"},
 {"id":111,"title":"blog110","content":"this is blog content"},
 {"id":110,"title":"blog109","content":"this is blog content"},
 {"id":109,"title":"blog108","content":"this is blog content"}],
 "last":false,
 "totalPages":9,
 "totalElements":123,
 "size":15,
 "number":0,
 "first":true,
 "sort":[{
 "direction":"DESC",
 "property":"id",
 "ignoreCase":false,
 "nullHandling":"NATIVE",
 "ascending":false
 }],
 "numberOfElements":15
}

通過查詢結(jié)果,我們可以知道:

以id倒序排列的10條數(shù)據(jù)

當(dāng)前頁不是最后一頁,后面還有數(shù)據(jù)

總共有9頁

每頁大小為15

當(dāng)前頁為第0頁

當(dāng)前頁是第一頁

當(dāng)前頁是以id倒序排列的

當(dāng)前頁一共有15條數(shù)據(jù)

怎么樣,信息是不是很豐富,代碼是不是很簡單,快點(diǎn)來嘗試一下Jpa的分頁查詢吧。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 亚洲午夜天堂吃瓜在线 | 成人黄色网战 | 国产精品野外av久久久 | 亚洲爱爱网站 | 久久福利剧场 | 成人午夜在线观看视频 | 国产欧美日韩二区 | 成人男男视频拍拍拍在线观看 | 天堂福利电影 | 懂色av懂色aⅴ精彩av | 3xxx| 欧美黄色性生活视频 | 99综合视频 | 亚洲乱搞| 日韩高清电影 | 97超碰资源站 | 亚洲射逼| 嫩草影院在线观看网站成人 | 午夜视频福利 | 蜜桃视频在线观看视频 | 蜜桃传免费看片www 一本色道精品久久一区二区三区 | 欧美精品亚洲人成在线观看 | 国产免费久久久 | 日本最新免费二区三区 | 久久久久免费精品国产小说色大师 | 天天草夜夜爽 | 天天草天天干天天射 | 国产欧美亚洲精品 | 午夜在线观看视频网站 | 国产精品视频亚洲 | 爱草成年| 精品成人一区二区三区 | 成人三级在线播放 | 91精品国产777在线观看 | 亚洲3p激情在线观看 | 成人午夜免费看 | 在线观看日韩中文字幕 | 国产精品久久久久久久久久久久久久久久 | a视频网站 | 中文字幕亚洲欧美 | 亚洲影院在线 |