日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Spring Boot和Thymeleaf整合結(jié)合JPA實(shí)現(xiàn)分頁效果(實(shí)例代碼)

瀏覽:99日期:2023-07-21 17:47:09

在項(xiàng)目里,我需要做一個(gè)Spring Boot結(jié)合Thymeleaf前端模版,結(jié)合JPA實(shí)現(xiàn)分頁的演示效果。做的時(shí)候發(fā)現(xiàn)有些問題,也查了現(xiàn)有網(wǎng)上的不少文檔,發(fā)現(xiàn)能全棧實(shí)現(xiàn)的不多,所以這里我就把我的做法,全部代碼和步驟貼出來供大家參考。

1 創(chuàng)建項(xiàng)目,用pom.xml引入依賴

這里將創(chuàng)建名為ThymeleafWithDB的Maven,在pom.xml里引入如下的依賴包。

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies>

而在此項(xiàng)目里,對(duì)應(yīng)的Stock庫存表如下所示。

字段名

類型

說明

id

int

主鍵

name

varchar

庫存貨物名

num

int

庫存數(shù)量

description

varchar

庫存貨物的描述

2 編寫啟動(dòng)類

這個(gè)類是中規(guī)中矩的,代碼如下。

package prj;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringBootApp { public static void main(String[] args) { SpringApplication.run(SpringBootApp.class, args); }}

3 在控制器類里,添加支持分頁的方法

@RequestMapping('/listByPage') public ModelAndView listByPage(@RequestParam(value = 'pageNum', defaultValue = '0') int pageNum,@RequestParam(value = 'pageSize', defaultValue = '3') int pageSize) { Page<Stock> stocks=stockService.getStockListByPage(pageNum, pageSize); System.out.println('total page:' + stocks.getTotalPages()); System.out.println('current Page:' + pageNum); ModelAndView modelAndView = new ModelAndView('listByPage'); //傳遞參數(shù) modelAndView.addObject('stocks',stocks); return modelAndView; }

在第2行和第3行定義該方法的參數(shù)時(shí),由于表示當(dāng)前頁的pageNum和每頁數(shù)據(jù)個(gè)數(shù)的pageSize參數(shù)都是從url請(qǐng)求里以get參數(shù)的形式得到,所以在之前要加@RequestParam注解,否則的話就無法從請(qǐng)求里得到這兩個(gè)參數(shù)。

在該方法的第4行里,調(diào)用了stockService對(duì)象的getStockListByPage方法,在傳入分頁參數(shù)的情況下,得到了當(dāng)前頁面中的數(shù)據(jù)。同時(shí)為了調(diào)試,還在第5行和第6行里,輸出了當(dāng)前頁和每頁個(gè)數(shù)的信息。

在拿到當(dāng)前頁面的數(shù)據(jù)后,該方法時(shí)通過第9行的方法,把它加到modelAndView對(duì)象里,并在第10行里,通過該對(duì)象,向listByPage視圖返回?cái)?shù)據(jù)。

4 編寫業(yè)務(wù)邏輯方法

public Page<Stock> getStockListByPage(int pageNum, int pageSize) { Sort sort = new Sort(Sort.Direction.ASC , 'ID'); Pageable pageable = PageRequest.of(pageNum, pageSize, sort); Page<Stock> stocks = stockRepo.findAll(pageable); return stocks; }

在這個(gè)方法的第2行里,首先通過Sort對(duì)象,定義了“按ID進(jìn)行升序排列”的排序方式,隨后通過第3行的PageRequest對(duì)象,定義的分頁的方式,這里表示起始數(shù)據(jù)的pageNum和每頁展示數(shù)據(jù)的pageSize值,都是來自于外部傳入的參數(shù)。

在確定好排序和分頁的方式后,本方法在第4行里,通過調(diào)用PagingAndSortingRepository類型對(duì)象stockRepo的findAll方法,根據(jù)在參數(shù)pageable里封裝好的分頁和排序的方式,向MySQL的stock數(shù)據(jù)表里請(qǐng)求數(shù)據(jù),并把得到的數(shù)據(jù)通過第5行的return語句返回。

5 編寫Repo類

package prj.repo;import org.springframework.data.repository.PagingAndSortingRepository;import org.springframework.stereotype.Component;import prj.model.Stock;@Componentpublic interface StockRepo extends PagingAndSortingRepository<Stock, Integer> { }

從第6行的代碼里大家能看到,該Repo類實(shí)現(xiàn)( implements)了JPA里包含分頁和排序功能的PagingAndSortingRepository接口,由于在StockService里調(diào)用的findAll方法已經(jīng)封裝在該JPA接口里了,所以這里在StockRepo類里,甚至不需要再寫代碼。

6 在application.yml文件里編寫JPA和Thymeleaf的配置參數(shù)

spring: jpa: show-sql: true hibernate: dll-auto: validate datasource: url: jdbc:mysql://localhost:3306/stock?serverTimezone=GMT username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver thymeleaf: enabled: true content-type: text/html check-template-location: true cache: false prefix: classpath:/templates/ suffix: .html

其中在第1行到第10行的代碼里,給出了JPA和MySQL的相關(guān)定義,而在第11行到第17行的代碼里,給出了Thymeleaf模板的參數(shù)。

這里用到的配置參數(shù),其實(shí)在前文里都已經(jīng)說明過,不過請(qǐng)注意第2行和第11行的縮進(jìn),根據(jù)yml配置文件的縮進(jìn)格式,第11行的thymeleaf其實(shí)是和第2行的jpa同級(jí),它們均屬于第1行的spring的子級(jí)配置。

7 添加listByPage.html頁面,實(shí)現(xiàn)分頁的效果

根據(jù)配置,該文件是需要放在resources/templates目錄里,具體代碼如下。

<!DOCTYPE html><html lang='en' xmlns:th='http://www.thymeleaf.org'><head> <meta charset='UTF-8'> <title>庫存列表</title></head><body><table border='2'> <tr> <td>庫存編號(hào)</td> <td>庫存貨物</td> <td>數(shù)量</td> <td>描述</td> </tr> <tr th:each='stock : ${stocks}'> <td th:text='${stock.ID}'></td> <td th:text='${stock.name}'></td> <td th:text='${stock.num}'></td> <td th:text='${stock.description}'></td> </tr></table><div> <ul> <li> <a th:href='http://www.b3g6.com/bcjs/’/listByPage?pageNum=0’' rel='external nofollow' rel='external nofollow' >首頁</a> </li> <li th:if='${stocks.hasPrevious()}'> <a th:href='http://www.b3g6.com/bcjs/’/listByPage?pageNum=’ + ${stocks.previousPageable().getPageNumber()}' rel='external nofollow' th:text='上一頁'></a> </li> <li th:if='${stocks.hasNext()}'> <a th:href='http://www.b3g6.com/bcjs/’/listByPage?pageNum=’ + ${stocks.nextPageable().getPageNumber()}' rel='external nofollow' th:text='下一頁'></a> </li> <li> <a th:href='http://www.b3g6.com/bcjs/’/listByPage?pageNum=’ + ${stocks.getTotalPages() - 1}' rel='external nofollow' rel='external nofollow' >尾頁</a> </li> </ul></div></body></html>

在第22行到第37行的<div>屬性元素里,加入了分頁的效果,具體說明如下。

在第25行的代碼,通過th:href='http://www.b3g6.com/bcjs/’/listByPage?pageNum=0’' rel='external nofollow' rel='external nofollow' 代碼,以u(píng)rl參數(shù)的形式,向控制器類的listByPage方法,傳遞了pageNum為0的參數(shù),以展示首頁數(shù)據(jù)。 在顯示“上一頁”的效果前,先需要通過第27行的th:if代碼判斷stocks對(duì)象里是否包含了上一頁的數(shù)據(jù),如果是,則通過第28行的代碼展示“上一頁”鏈接,請(qǐng)注意這里“上一頁”鏈接所對(duì)應(yīng)的參數(shù),這樣就能通過該鏈接,得到上一頁的數(shù)據(jù)。 展示“下一頁”的方法和展示“上一頁”的很相似,都是先通過th:if判斷是否有下一頁數(shù)據(jù),然后再通過鏈接得到下一頁的數(shù)據(jù)。 在第34行的代碼里,通過th:href='http://www.b3g6.com/bcjs/’/listByPage?pageNum=’ + ${stocks.getTotalPages() - 1}' rel='external nofollow' rel='external nofollow' 的代碼得到了尾頁的數(shù)據(jù),請(qǐng)注意這里是用url中pageNum的參數(shù)值,得到尾頁的數(shù)據(jù)。

8 觀察效果

編寫完成后,啟動(dòng)該項(xiàng)目,此時(shí)如果在瀏覽器里輸入http://localhost:8080/listByPage,就能看到如下圖所示的效果。

Spring Boot和Thymeleaf整合結(jié)合JPA實(shí)現(xiàn)分頁效果(實(shí)例代碼)

從中大家能看到,上圖里每頁的數(shù)據(jù)是3條,而且在數(shù)據(jù)下方展示了對(duì)應(yīng)的分頁鏈接,由于是第一頁,所以沒有包含“上一頁”的鏈接。如果點(diǎn)擊上圖里的“下一頁”鏈接,就能看到頁面跳轉(zhuǎn)的效果,如下圖所示。

Spring Boot和Thymeleaf整合結(jié)合JPA實(shí)現(xiàn)分頁效果(實(shí)例代碼)

從中大家不僅能看到頁面上的數(shù)據(jù)變化,而且還能看到在url里,通過攜帶pageNum參數(shù)的方式,取到了下一頁數(shù)據(jù)。并且,由于參數(shù)stocks里已經(jīng)包含了“上一頁”的數(shù)據(jù),所以還能看到對(duì)應(yīng)的鏈接。同樣地,大家還能自行點(diǎn)擊“首頁”、“下一頁”和“尾頁”等鏈接,以觀察對(duì)應(yīng)的效果。

到此這篇關(guān)于Spring Boot和Thymeleaf整合結(jié)合JPA實(shí)現(xiàn)分頁效果的文章就介紹到這了,更多相關(guān)Spring Boot和Thymeleaf實(shí)現(xiàn)分頁內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
www成人在线视频| 国产精品亚洲人成在99www| 蜜桃视频一区二区| 久久精品天堂| 欧美国产美女| 日韩av中文字幕一区| 日韩福利视频网| 午夜久久美女| 91视频精品| 日韩中文字幕| 最新国产精品久久久| 亚洲bt欧美bt精品777| 亚洲性图久久| 99在线|亚洲一区二区| 国产一区二区精品福利地址| 国产精品天堂蜜av在线播放| 国产剧情一区| 欧美va天堂| 久久激情网站| 久久国产精品久久久久久电车| 欧美成人一二区| 国产精品欧美在线观看| 另类专区亚洲| 日韩欧美四区| 天堂久久av| 亚洲人妖在线| 欧美亚洲tv| 先锋影音国产一区| 亚洲久久视频| 国产精品蜜芽在线观看| 精品免费视频| | 午夜一级久久| 免费视频一区二区三区在线观看| 亚洲神马久久| 欧美成人日韩| 成人国产精品一区二区免费麻豆| 国产精品社区| 日韩区欧美区| 欧美日韩亚洲一区二区三区在线 | 国产一区二区视频在线看| 国产精品综合| 久久青青视频| 欧美va亚洲va日韩∨a综合色| 香蕉国产精品| 中文亚洲欧美| 久久先锋影音| 国产伦乱精品| 久久国产精品美女| 老司机免费视频一区二区| 日韩午夜免费| 婷婷亚洲精品| 久久影院一区| 国产成人免费av一区二区午夜| 欧洲一区二区三区精品| 国模精品一区| 久久伊人亚洲| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 亚洲天堂免费| 久久在线视频免费观看| 久久精品福利| 欧美69视频| 精品捆绑调教一区二区三区| 中文字幕乱码亚洲无线精品一区| 亚洲三级视频| 亚洲制服少妇| 综合国产精品| 日本精品黄色| 亚洲精品视频一二三区| 四虎4545www国产精品 | 日韩午夜在线| 精品丝袜在线| 精品国产亚洲一区二区在线观看| 亚洲免费中文| 夜久久久久久| 日韩一区电影| 一级欧洲+日本+国产| 国产精品777777在线播放 | 亚洲国产综合在线看不卡| 综合日韩av| 国产乱码精品一区二区亚洲| 婷婷精品在线观看| 国产精品资源| 国产一区二区三区四区大秀| 久久香蕉精品| 亚洲国产不卡| 视频在线观看一区| 精品一区视频| 亚洲一区亚洲| 777久久精品| 日韩1区2区| 久久久久91| 亚洲aa在线| 国产欧美丝祙| av一区二区高清| 日韩精品视频中文字幕| 激情综合激情| 日韩亚洲在线| 亚洲激精日韩激精欧美精品| 999在线观看精品免费不卡网站| 欧美香蕉视频| 日韩中文字幕一区二区三区| 国产成人精品一区二区三区免费| 久久中文字幕av一区二区不卡| 婷婷综合成人| 久久蜜桃资源一区二区老牛| 国产精品高潮呻吟久久久久| 在线观看亚洲精品福利片| 97精品一区| 欧美午夜三级| 欧美激情三区| 欧美亚洲国产激情| 蜜桃久久久久久| 亚洲欧美久久久| 999久久久国产精品| 亚洲五月婷婷| 蜜臀a∨国产成人精品| 中文字幕乱码亚洲无线精品一区| 精品一区三区| 999精品色在线播放| 视频一区日韩| 欧美片网站免费| 欧美三级第一页| 蜜臀精品一区二区三区在线观看 | 久久三级福利| 亚洲精品少妇| 午夜欧美在线| 久久一级电影| 免费在线日韩av| 日韩欧美视频专区| 久久福利影视| 日韩精品免费一区二区夜夜嗨 | 国产欧美日韩综合一区在线播放| 日韩中文字幕麻豆| 亚洲成人不卡| 亚洲v在线看| 久久精品观看| 视频一区二区欧美| 亚洲黄色影院| 日韩不卡一区| 国产欧美在线观看免费| 麻豆一区二区99久久久久| 久久国产视频网| 久久在线视频免费观看| 国产videos久久| 伊人成人网在线看| 久久要要av| 久久久777| 亚洲三级网站| 国产综合婷婷| 亚洲欧美视频| 亚洲综合小说| 久久精品在线| 免费精品视频| 综合国产精品| 国产精品v一区二区三区| 国产激情欧美| 亚洲国内欧美| 精品黄色一级片| 黄色在线一区| 亚洲无线观看| 福利片在线一区二区| 国产福利一区二区精品秒拍 | 亚洲爱爱视频| 亚洲91网站| 亚洲欧美视频一区二区三区| 久久国产免费| 国产a亚洲精品| 国产精品.xx视频.xxtv| 日韩久久精品网| 午夜在线视频观看日韩17c| 另类欧美日韩国产在线| 7m精品国产导航在线| 欧美一区精品| 久久一级电影| 一区免费在线| 亚洲日韩视频| 亚洲先锋成人| 欧美成a人免费观看久久| 国产精品毛片一区二区三区| 最近高清中文在线字幕在线观看1| 中文国产一区| 国产精成人品2018| 手机精品视频在线观看| 欧美精选视频一区二区| 国产精品v一区二区三区| 国产亚洲观看| 亚洲另类黄色| 亚洲色图网站| 老司机精品久久| 欧美伊人影院| 国产精品巨作av| 99久久久久国产精品| 国产亚洲午夜| 国产精品一国产精品| 国产精品88久久久久久| 91成人在线网站| 日韩电影在线视频| 色婷婷成人网| 亚洲欧美一区在线|