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

您的位置:首頁技術文章
文章詳情頁

Spring Boot和Thymeleaf整合結合JPA實現分頁效果(實例代碼)

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

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

1 創建項目,用pom.xml引入依賴

這里將創建名為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>

而在此項目里,對應的Stock庫存表如下所示。

字段名

類型

說明

id

int

主鍵

name

varchar

庫存貨物名

num

int

庫存數量

description

varchar

庫存貨物的描述

2 編寫啟動類

這個類是中規中矩的,代碼如下。

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'); //傳遞參數 modelAndView.addObject('stocks',stocks); return modelAndView; }

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

在該方法的第4行里,調用了stockService對象的getStockListByPage方法,在傳入分頁參數的情況下,得到了當前頁面中的數據。同時為了調試,還在第5行和第6行里,輸出了當前頁和每頁個數的信息。

在拿到當前頁面的數據后,該方法時通過第9行的方法,把它加到modelAndView對象里,并在第10行里,通過該對象,向listByPage視圖返回數據。

4 編寫業務邏輯方法

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; }

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

在確定好排序和分頁的方式后,本方法在第4行里,通過調用PagingAndSortingRepository類型對象stockRepo的findAll方法,根據在參數pageable里封裝好的分頁和排序的方式,向MySQL的stock數據表里請求數據,并把得到的數據通過第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類實現( implements)了JPA里包含分頁和排序功能的PagingAndSortingRepository接口,由于在StockService里調用的findAll方法已經封裝在該JPA接口里了,所以這里在StockRepo類里,甚至不需要再寫代碼。

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

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的相關定義,而在第11行到第17行的代碼里,給出了Thymeleaf模板的參數。

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

7 添加listByPage.html頁面,實現分頁的效果

根據配置,該文件是需要放在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>庫存編號</td> <td>庫存貨物</td> <td>數量</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://m.b3g6.com/bcjs/’/listByPage?pageNum=0’' rel='external nofollow' rel='external nofollow' >首頁</a> </li> <li th:if='${stocks.hasPrevious()}'> <a th:href='http://m.b3g6.com/bcjs/’/listByPage?pageNum=’ + ${stocks.previousPageable().getPageNumber()}' rel='external nofollow' th:text='上一頁'></a> </li> <li th:if='${stocks.hasNext()}'> <a th:href='http://m.b3g6.com/bcjs/’/listByPage?pageNum=’ + ${stocks.nextPageable().getPageNumber()}' rel='external nofollow' th:text='下一頁'></a> </li> <li> <a th:href='http://m.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://m.b3g6.com/bcjs/’/listByPage?pageNum=0’' rel='external nofollow' rel='external nofollow' 代碼,以url參數的形式,向控制器類的listByPage方法,傳遞了pageNum為0的參數,以展示首頁數據。 在顯示“上一頁”的效果前,先需要通過第27行的th:if代碼判斷stocks對象里是否包含了上一頁的數據,如果是,則通過第28行的代碼展示“上一頁”鏈接,請注意這里“上一頁”鏈接所對應的參數,這樣就能通過該鏈接,得到上一頁的數據。 展示“下一頁”的方法和展示“上一頁”的很相似,都是先通過th:if判斷是否有下一頁數據,然后再通過鏈接得到下一頁的數據。 在第34行的代碼里,通過th:href='http://m.b3g6.com/bcjs/’/listByPage?pageNum=’ + ${stocks.getTotalPages() - 1}' rel='external nofollow' rel='external nofollow' 的代碼得到了尾頁的數據,請注意這里是用url中pageNum的參數值,得到尾頁的數據。

8 觀察效果

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

Spring Boot和Thymeleaf整合結合JPA實現分頁效果(實例代碼)

從中大家能看到,上圖里每頁的數據是3條,而且在數據下方展示了對應的分頁鏈接,由于是第一頁,所以沒有包含“上一頁”的鏈接。如果點擊上圖里的“下一頁”鏈接,就能看到頁面跳轉的效果,如下圖所示。

Spring Boot和Thymeleaf整合結合JPA實現分頁效果(實例代碼)

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

到此這篇關于Spring Boot和Thymeleaf整合結合JPA實現分頁效果的文章就介紹到這了,更多相關Spring Boot和Thymeleaf實現分頁內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲深夜影院| 日韩国产一二三区| 精品欧美激情在线观看| 久久精品99国产精品日本| 99国产精品| 日本亚洲三级在线| 国产精品美女久久久| 日韩成人亚洲| 欧美日韩视频免费观看| 免费日韩成人| 日韩福利视频一区| 日韩激情av在线| 综合欧美精品| 奇米亚洲欧美| 日av在线不卡| 成人看片网站| 卡一精品卡二卡三网站乱码| 日韩精品欧美成人高清一区二区| 亚洲精品123区| 97se综合| 激情六月综合| 日韩高清中文字幕一区二区| 久久婷婷一区| 亚洲伦乱视频| 9999国产精品| 国产91精品对白在线播放| 欧美成人a交片免费看| 国产精品成人一区二区网站软件| 欧美亚洲福利| 国产亚洲一区| 国产精品极品| 久久中文字幕一区二区| 精品视频网站| 亚洲精品在线影院| 99久久九九| 水蜜桃久久夜色精品一区的特点 | 日韩精品一区二区三区中文| 免费一级片91| 亚欧成人精品| 国产一区二区三区久久久久久久久| 欧美国产极品| 日韩成人综合| 欧美日韩国产亚洲一区| 99精品99| 日韩中文字幕区一区有砖一区| 黄色亚洲精品| 人人精品久久| 国产日本久久| 欧美/亚洲一区| 欧美在线综合| 国产精品115| 国产精品一区三区在线观看| 欧美亚洲人成在线| 精品久久久久久久| 九九色在线视频| 国产亚洲一区在线| 中文字幕日本一区二区| 九一精品国产| 日韩一区二区三区免费视频| 日韩欧美高清一区二区三区| 91成人在线| 精品欧美视频| 成人羞羞视频在线看网址| 免费观看在线综合色| 日韩中文字幕一区二区高清99| 精品国产一区二区三区噜噜噜| 日韩欧美另类一区二区| 欧美精品第一区| 久久久久伊人| 欧美日韩一区二区三区视频播放| 亚洲精品一二三区区别| 日韩影片在线观看| 给我免费播放日韩视频| 少妇精品导航| 日本午夜免费一区二区| 国产欧美一级| 欧美国产专区| 伊人久久亚洲热| 日韩激情中文字幕| 红桃视频国产精品| 久久成人高清| 欧美三级第一页| 久久影视一区| 国产日产精品一区二区三区四区的观看方式| 女生影院久久| 在线精品国产亚洲| 久久三级福利| 91成人在线网站| 999久久久免费精品国产| 国产欧美日韩视频在线| 日韩成人a**站| 亚洲精品美女91| 在线亚洲人成| 国产亚洲欧美日韩精品一区二区三区| 午夜久久一区| 国产精品99一区二区三区| 亚洲开心激情| 成人羞羞在线观看网站| 日韩1区2区| 国产精品三级| 国产亚洲一区二区手机在线观看| 久久精品五月| 伊人久久大香线蕉av超碰演员| 精品一区二区男人吃奶| 爽爽淫人综合网网站| 久久久久免费| 日本v片在线高清不卡在线观看| 精品理论电影在线| 日韩国产欧美三级| 最新亚洲一区| 自由日本语亚洲人高潮| 精品日韩一区| 色综合视频一区二区三区日韩| 五月精品视频| 久久精品国产99国产精品| 欧美日韩精品一区二区三区在线观看| 欧美成人亚洲| 精品网站aaa| 久久久久久久久成人| 免费成人性网站| 美女网站一区| 成人在线免费观看91| 婷婷精品视频| 日韩中文影院| 成人三级高清视频在线看| 国产在线不卡一区二区三区| 欧美一级二级三级视频| 久久久成人网| 日韩av资源网| 成人羞羞在线观看网站| 欧美日韩国产观看视频| 亚洲我射av| 欧美日韩免费看片| 国产一区不卡| 日韩中文在线电影| 国产精品一区二区三区www| 久久精品不卡| 日韩二区三区在线观看| 在线看片不卡| 蜜桃视频一区二区三区在线观看| 久久高清精品| 好看的亚洲午夜视频在线| 麻豆精品蜜桃| 亚洲97av| 日韩精品导航| 日韩美女精品| 久久av偷拍| 国产精品成人国产| 高清久久一区| 亚洲1234区| 人人香蕉久久| 丝袜av一区| 亚洲性色视频| 伊人久久亚洲美女图片| 黑森林国产精品av| 亚洲欧美一区在线| 国产精品色网| 欧美久久一区二区三区| 欧美一区久久| 日韩av在线播放网址| 日韩大片免费观看| 亚洲综合日本| 日本综合精品一区| 亚洲精品自拍| 精品一区二区三区中文字幕在线| 久久99久久久精品欧美| 在线看片福利| 久久中文字幕二区| 亚洲精品黄色| 国产激情久久| 精品欧美视频| 9色精品在线| 亚洲精品婷婷| 久久精品国产久精国产| 欧美日韩国产探花| 91精品99| 免费在线亚洲欧美| 日本不卡免费高清视频在线| 在线一区电影| 高清精品久久| 日韩精品第二页| 中文字幕在线高清| 国产一区二区三区亚洲综合| 亚洲国产一区二区在线观看 | 免费看的黄色欧美网站| 美女国产一区| 亚洲精品看片| аⅴ资源天堂资源库在线| 亚洲香蕉网站| 欧美日韩一区二区三区四区在线观看| 国产伊人久久| 爽好久久久欧美精品| 综合亚洲视频| 日韩国产欧美| 中文不卡在线| 国产色99精品9i| 欧美日中文字幕| 欧美专区一区| 婷婷亚洲五月| 日本免费新一区视频|