Spring – REST 分页
Spring Framework 构建在 servlet 之上。这个特殊的 Web 框架具有非常重要的功能,我们可以利用这些功能开发高效和有效的 Web 应用程序。在 Spring Framework 之上,Spring Boot 于 2014 年 4 月发布。Spring Boot 背后的主要目标是 Auto-Configuration 特性。 Spring MVC(模型视图控制器)是嵌入在 Spring 的“Web Starter”依赖项中的 Spring Framework 的子域或子项目。它用于开发 Web 应用程序。 Web Starter 还包含用于开发 REST API 的功能。我们使用它来返回数据或数据列表,而不是 HTML 页面。
从数据源检索的数据可能非常大,不方便列出所有数据,太直接了。可以通过多种方式控制检索或返回的数据。例如,为了限制实体或对象的返回、它们的排序方式等。在这里,分页开始起作用。
分页功能
- 将输出限制为相应的一组项目。
- 可以从一组项目遍历到另一组。
- 可以处理数据值的大偏移量。
- 可以订购输出。例如 - 根据某些属性升序或降序。
使用 Spring 的 REST API 进行分页
A. 文件:pom.xml (应用程序的配置)
XML
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.6.4
sia
GFG-Pagination
0.0.1-SNAPSHOT
GFG-Pagination
GFG
11
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
mysql
mysql-connector-java
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
Java
// Java Program to Illustrate Bootstrapping of Application
package gfg;
// Importing required classes
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// Annotation
@SpringBootApplication
// Class
public class GfgPaginationApplication {
// Main driver method
public static void main(String[] args)
{
SpringApplication.run(
GfgPaginationApplication.class, args);
}
}
Java
// Java Program to Illustrate Model Data
package gfg;
// Importing required classes
import javax.persistence.Entity;
import javax.persistence.Id;
import lombok.Data;
import lombok.RequiredArgsConstructor;
// Annotation
@Data
@RequiredArgsConstructor
@Entity(name = "user")
// Class
public class UserEntity {
@Id String user;
String username;
String password;
}
Java
// Java Program to Illustrate Data Repository
package gfg;
// Importing required classes
import org.springframework.data.jpa.repository.JpaRepository;
// Interface
public interface UserRepository
extends JpaRepository {
}
Java
// Java Program to Illustrate REST API
package gfg;
// Importing required classes
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/get")
public class PagedRestController {
// links automatically created repository bean in
// Spring Application context
@Autowired UserRepository data;
@GetMapping("/page-One")
public List getPageOne()
{
// First page with 5 items
Pageable paging = PageRequest.of(
0, 5, Sort.by("user").ascending());
Page page = data.findAll(paging);
// Retrieve the items
return page.getContent();
}
@GetMapping("/page-Two")
public List getPageTwo()
{
// Second page with another 5 items
Pageable paging = PageRequest.of(
1, 5, Sort.by("user").ascending());
Page page = data.findAll(paging);
// Retrieve the items
return page.getContent();
}
}
B. GfgPaginationApplication。Java
Java
// Java Program to Illustrate Bootstrapping of Application
package gfg;
// Importing required classes
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// Annotation
@SpringBootApplication
// Class
public class GfgPaginationApplication {
// Main driver method
public static void main(String[] args)
{
SpringApplication.run(
GfgPaginationApplication.class, args);
}
}
C. application.properties(属性的配置)
- 此文件包含构建 Datasource 对象所需的所有属性及其值。
- Datasource 对象由“Spring Data JPA”依赖项提供。
- Spring Data JPA 具有 Hibernate 的默认实现。
- 该文件还包含一些 Hibernate 属性。
- 然后 MySQL 驱动程序使用构建的 Datasource 对象连接到数据库。
- 因此,我们也可以与各自的数据库进行交互。
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/userdetails
spring.datasource.username=root
spring.datasource.password=password
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
D. 用户实体。Java
此类映射到数据库中的表。
1.持久化注解:
- @Entity – 它指定类是一个实体。 'name' 属性用于将类名映射到数据库中的表名(如果它们不相同)。
- @Id - 它指定应用它的属性充当我们可以访问数据库的各个表的主键。
2.龙目岛注解
- @Data - 它在运行时自动为所有字段生成 Getter 和 Setter 方法。
- @RequiredArgsConstructor – 它为所有必需字段生成构造函数,即带有关键字 final 或 @NonNull 注释的字段。如果不存在此类字段,则创建零参数构造函数。这个注解是@Data 注解的一部分。
The object of this class will be returned as a JSON response by the REST API.
例子:
Java
// Java Program to Illustrate Model Data
package gfg;
// Importing required classes
import javax.persistence.Entity;
import javax.persistence.Id;
import lombok.Data;
import lombok.RequiredArgsConstructor;
// Annotation
@Data
@RequiredArgsConstructor
@Entity(name = "user")
// Class
public class UserEntity {
@Id String user;
String username;
String password;
}
E. 文件:用户存储库。Java
- 该接口用于处理数据库,无需编写繁琐的 JDBC( Java数据库连接)方法。
- 此接口扩展了“接口 JpaRepository
”,其中 T 是 Object 类型,ID 是主键的类型。
Note: JpaRepository has 4 superinterfaces QueryByExampleExecutor
CrudRepository provides the generalized JDBC methods which run SQL scripts to interact with the databases.
(Create, Read, Update, Delete).
public interface PagingAndSortingRepository
extends CrudRepository
PagingAndSortingRepository 接口的方法如下: Method DescriptionPage Returns a Page of entities meeting the paging restriction provided in the Pageable object. Iterable Returns all entities sorted by the given options.
例子:
Java
// Java Program to Illustrate Data Repository
package gfg;
// Importing required classes
import org.springframework.data.jpa.repository.JpaRepository;
// Interface
public interface UserRepository
extends JpaRepository {
}
F. 文件:PagedRestController。Java
- 此控制器类返回一个 UserEntities 对象列表作为响应。
- 在这里,使用 PageRequest.of() 工厂方法创建了一个 Pageable 对象。
- 此方法接受 3 个参数:
- 一个相应的页数。
- 每页要检索的条目数。
- 排序技术。
Pageable 的这个对象被传递给 PagingAndSortingRepository
例子:
Java
// Java Program to Illustrate REST API
package gfg;
// Importing required classes
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/get")
public class PagedRestController {
// links automatically created repository bean in
// Spring Application context
@Autowired UserRepository data;
@GetMapping("/page-One")
public List getPageOne()
{
// First page with 5 items
Pageable paging = PageRequest.of(
0, 5, Sort.by("user").ascending());
Page page = data.findAll(paging);
// Retrieve the items
return page.getContent();
}
@GetMapping("/page-Two")
public List getPageTwo()
{
// Second page with another 5 items
Pageable paging = PageRequest.of(
1, 5, Sort.by("user").ascending());
Page page = data.findAll(paging);
// Retrieve the items
return page.getContent();
}
}
输出 1:
输出 2:
Conclusion:
- As most industries work with large datasets, REST APIs are very popular and widely used as they help in returning data responses.
- Therefore, for them, Pagination becomes a very crucial feature for them to apply.
- It also helps to build a good and manageable UI ( User Interface).