javascript
SpringData核心数据访问接口--PagingAndSortingRepository
PagingAndSortingRepository繼承自CrudRepository接口,所以除了擁有CrudReposirory的功能外,他還增加了排序和分頁(yè)查詢的功能。
創(chuàng)建一個(gè)Maven項(xiàng)目,在src/main下新建一個(gè)名為resources的文件夾。
①修改pom.xml
<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>
? <groupId>com.ysh</groupId>
? <artifactId>pagingandsortingrepositorytest</artifactId>
? <version>0.0.1-SNAPSHOT</version>
? <packaging>jar</packaging>
? <name>pagingandsortingrepositorytest</name>
? <url>http://maven.apache.org</url>
? <!--??
??spring-boot-starter-parent是Spring Boot的核心啟動(dòng)器,
??包含了自動(dòng)配置、日志和YAML等大量默認(rèn)的配置,大大簡(jiǎn)化了我們的開(kāi)發(fā)。
??引入之后相關(guān)的starter引入就不需要添加version配置,
???? spring boot會(huì)自動(dòng)選擇最合適的版本進(jìn)行添加。
? -->
? <parent>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-parent</artifactId>
??<version>2.0.0.RELEASE</version>
??<relativePath/>
?</parent>
?
?? <properties>
??<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
??<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
??<java.version>1.8</java.version>
?</properties>
? <dependencies>
?
? ?<!-- 添加spring-boot-starter-web模塊依賴 -->
? ?<dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-web</artifactId>
?</dependency>
?
? ?<!-- 添加spring-boot-starter-thymeleaf模塊依賴 -->
? ?<dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-thymeleaf</artifactId>
?</dependency>
?
?<!-- 添加MySQL依賴 -->
??? <dependency>
??<groupId>mysql</groupId>
??<artifactId>mysql-connector-java</artifactId>
?</dependency>
???????
???????? <!-- 添加Spring Data JPA依賴 -->
???? <dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-data-jpa</artifactId>
?</dependency>
?
??? <dependency>
????? <groupId>junit</groupId>
????? <artifactId>junit</artifactId>
????? <scope>test</scope>
??? </dependency>
? </dependencies>
</project>
修改完之后,保存,右擊項(xiàng)目名選擇Maven---update project
?
②配置基本屬性
在src/main/resources下新建一個(gè)全局配置文件,命名為application.properties
#數(shù)據(jù)庫(kù)地址,其中springdatajpa是數(shù)據(jù)庫(kù)名稱
spring.datasource.url=jdbc:mysql://localhost:3306/springdatajpa
#數(shù)據(jù)庫(kù)用戶名
spring.datasource.username=root
#數(shù)據(jù)庫(kù)密碼,要改成自己的密碼
spring.datasource.password=yourpassword
#數(shù)據(jù)庫(kù)驅(qū)動(dòng),固定格式
spring.datasource.driverClassName=com.mysql.jdbc.Driver
#指定連接池中最大的活躍連接數(shù)
spring.datasource.max-active=20
#指定連接池最大的空閑連接
spring.datasource.max-idle=8
#指定必須保持連接的最小值
spring.datasource.min-idle=8
spring.datasource.initial-size=10
########################################################
### JPA持久化配置
########################################################
# 指定數(shù)據(jù)庫(kù)類型
spring.jpa.database=MySQL
# 指定是否需要在日志中顯示sql語(yǔ)句
spring.jpa.show-sql=true
# 指定自動(dòng)創(chuàng)建|更新|驗(yàn)證數(shù)據(jù)庫(kù)表結(jié)構(gòu)等配置
# 表示如果數(shù)據(jù)庫(kù)中存在持久化類對(duì)應(yīng)的表就不創(chuàng)建,不存在就創(chuàng)建對(duì)應(yīng)的表
spring.jpa.hibernate.ddl-auto=update
# 指定命名策略
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
#指定數(shù)據(jù)庫(kù)方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
③創(chuàng)建持久化類
在com.ysh下新建4個(gè)包,bean(放置持久化類)、controller(控制器)、repository(定義數(shù)據(jù)訪問(wèn)接口的類)、service(業(yè)務(wù)邏輯處理類)
在bean下創(chuàng)建持久化類Article.java
package com.ysh.pagingandsortingrepositorytest.bean;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/**
?*? 商品對(duì)象
?* */
@Entity
@Table(name="tb_article")
public class Article implements Serializable{
?private static final long serialVersionUID = 1L;
?
?@Id
?@GeneratedValue(strategy = GenerationType.IDENTITY)
?private int id;
?private String title;
?private String supplier;
?private Double price;
?private String locality;
?private Date putawayDate;
?private int storage;
?private String image;
?private String description;
?private Date createDate;
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getTitle() {
??return title;
?}
?public void setTitle(String title) {
??this.title = title;
?}
?public String getSupplier() {
??return supplier;
?}
?public void setSupplier(String supplier) {
??this.supplier = supplier;
?}
?public Double getPrice() {
??return price;
?}
?public void setPrice(Double price) {
??this.price = price;
?}
?public String getLocality() {
??return locality;
?}
?public void setLocality(String locality) {
??this.locality = locality;
?}
?public Date getPutawayDate() {
??return putawayDate;
?}
?public void setPutawayDate(Date putawayDate) {
??this.putawayDate = putawayDate;
?}
?public int getStorage() {
??return storage;
?}
?public void setStorage(int storage) {
??this.storage = storage;
?}
?public String getImage() {
??return image;
?}
?public void setImage(String image) {
??this.image = image;
?}
?public String getDescription() {
??return description;
?}
?public void setDescription(String description) {
??this.description = description;
?}
?public Date getCreateDate() {
??return createDate;
?}
?public void setCreateDate(Date createDate) {
??this.createDate = createDate;
?}
}
④定義數(shù)據(jù)訪問(wèn)層接口
在repository包下新建一個(gè)接口,命名為ArticleRepository,讓該接口繼承PagingAndSortingRepository
package com.ysh.pagingandsortingrepositorytest.repository;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.ysh.pagingandsortingrepositorytest.bean.Article;
public interface ArticleRepository extends PagingAndSortingRepository<Article, Integer> {
}
在Spring Boot項(xiàng)目中,數(shù)據(jù)訪問(wèn)層接口無(wú)須提供實(shí)現(xiàn),直接繼承數(shù)據(jù)訪問(wèn)接口即可
?
⑤定義業(yè)務(wù)層類
ArticleService.java
package com.ysh.pagingandsortingrepositorytest.service;
import javax.annotation.Resource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import com.ysh.pagingandsortingrepositorytest.bean.Article;
import com.ysh.pagingandsortingrepositorytest.repository.ArticleRepository;
@Service
public class ArticleService {
?
?// 注入數(shù)據(jù)訪問(wèn)層接口對(duì)象
?@Resource
?private ArticleRepository articleRepository;
?
?public Iterable<Article> findAllSort(Sort sort) {
??return articleRepository.findAll(sort);
?}
?public Page<Article> findAll(Pageable page) {
??return articleRepository.findAll(page);
?}
}
⑥定義控制器類
在controller包下先新建一個(gè)控制器類,命名ArticleController
package com.ysh.pagingandsortingrepositorytest.controller;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ysh.pagingandsortingrepositorytest.bean.Article;
import com.ysh.pagingandsortingrepositorytest.service.ArticleService;
@RestController
@RequestMapping("/article")
public class ArticleController {
?
?// 注入ArticleService
?@Resource
?private ArticleService articleService;
?@RequestMapping("/sort")
?public Iterable<Article> sortArticle() {
??// 指定排序參數(shù)對(duì)象:根據(jù)id,進(jìn)行降序查詢
??Sort sort = new Sort(Sort.Direction.DESC, "id");
??Iterable<Article> articleDatas = articleService.findAllSort(sort);
??return articleDatas;
?}
?@RequestMapping("/pager")
?public List<Article> sortPagerArticle(int pageIndex) {
??// 指定排序參數(shù)對(duì)象:根據(jù)id,進(jìn)行降序查詢
??Sort sort = new Sort(Sort.Direction.DESC, "id");
??/**
?? * 封裝分頁(yè)實(shí)體 參數(shù)一:pageIndex表示當(dāng)前查詢的第幾頁(yè)(默認(rèn)從0開(kāi)始,0表示第一頁(yè)) 參數(shù)二:表示每頁(yè)展示多少數(shù)據(jù),現(xiàn)在設(shè)置每頁(yè)展示2條數(shù)據(jù)
?? * 參數(shù)三:封裝排序?qū)ο?#xff0c;根據(jù)該對(duì)象的參數(shù)指定根據(jù)id降序查詢
?? * */
??Pageable page = PageRequest.of(pageIndex - 1, 2, sort);
??Page<Article> articleDatas = articleService.findAll(page);
??System.out.println("查詢總頁(yè)數(shù):" + articleDatas.getTotalPages());
??System.out.println("查詢總記錄數(shù):" + articleDatas.getTotalElements());
??System.out.println("查詢當(dāng)前第幾頁(yè):" + articleDatas.getNumber() + 1);
??System.out.println("查詢當(dāng)前頁(yè)面的記錄數(shù):" + articleDatas.getNumberOfElements());
??// 查詢出的結(jié)果數(shù)據(jù)集合
??List<Article> articles = articleDatas.getContent();
??System.out.println("查詢當(dāng)前頁(yè)面的集合:" + articles);
??return articles;
?}
}
⑦測(cè)試應(yīng)用
啟動(dòng)MySql數(shù)據(jù)庫(kù),新建數(shù)據(jù)庫(kù)springdatajpa數(shù)據(jù)庫(kù)
新建App.java啟動(dòng)類
package com.ysh.pagingandsortingrepositorytest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
?* @SpringBootApplication指定這是一個(gè) spring boot的應(yīng)用程序.
?*/
@SpringBootApplication
public class App
{
??? public static void main( String[] args )
??? {
??? ?// SpringApplication 用于從main方法啟動(dòng)Spring應(yīng)用的類。
??????? SpringApplication.run(App.class, args);
??? }
}
項(xiàng)目啟動(dòng)后,JPA會(huì)在數(shù)據(jù)庫(kù)中自動(dòng)創(chuàng)建持久化類對(duì)應(yīng)的tb_article表,然后打開(kāi)此表,插入一些數(shù)據(jù)
打開(kāi)瀏覽器,輸入:localhost:8080/article/sort
請(qǐng)求會(huì)提交到ArticleController類的sortArticle方法進(jìn)行處理,該方法執(zhí)行順序查詢,將tb_article表中的數(shù)據(jù)以降序的方式查出并以JSON格式返回瀏覽器
用谷歌瀏覽器打開(kāi):
用火狐瀏覽器打開(kāi):
?
測(cè)試分頁(yè)查詢第一頁(yè)商品數(shù)據(jù),在瀏覽器中輸入:http://localhost:8080/article/pager?pageIndex=1
請(qǐng)求會(huì)提交到ArticleController類的sortPageArticle方法中進(jìn)行處理,該方法接受pageIndex參數(shù),根據(jù)參數(shù)確定查詢第幾頁(yè)數(shù)據(jù)
查詢第一頁(yè)數(shù)據(jù)
查詢第二頁(yè)數(shù)據(jù):在瀏覽器中輸入:http://localhost:8080/article/pager?pageIndex=2
?
附:項(xiàng)目目錄結(jié)構(gòu)
?
示例代碼下載:
https://download.csdn.net/download/badao_liumang_qizhi/10549085
?
總結(jié)
以上是生活随笔為你收集整理的SpringData核心数据访问接口--PagingAndSortingRepository的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SpringBoot项目启动时:Fail
- 下一篇: SpringDataJpa开发--继承J