Spring Boot – MongoRepository 与示例
Spring Boot 建立在 Spring 之上,包含了 Spring 的所有特性。并且由于其快速的生产就绪环境使开发人员能够直接专注于逻辑而不是为配置和设置而苦苦挣扎,如今它正成为开发人员的最爱。 Spring Boot 是一个基于微服务的框架,在其中制作可用于生产的应用程序只需要很少的时间。以下是 Spring Boot 的一些特性:
- 它允许避免在 spring 中存在的 XML 的繁重配置
- 它提供易于维护和创建 REST 端点
- 它包括嵌入式 Tomcat 服务器
- 部署非常简单,war和jar文件可以轻松部署在tomcat服务器中
更多信息请参考这篇文章:Spring Boot 简介。在本文中,我们将讨论如何使用MongoRepository来管理 Spring Boot 应用程序中的数据。
Mongo存储库
MongoRepository 是 Spring Data 在包org.springframework.data.mongodb.repository中提供的一个接口。 MongoRepository 扩展了PagingAndSortingRepository和QueryByExampleExecutor接口,进一步扩展了CrudRepository接口。 MongoRepository 提供了帮助创建 CRUD 应用程序的所有必要方法,它还支持自定义派生查询方法。
句法:
public interface MongoRepository extends PagingAndSortingRepository, QueryByExampleExecutor
在哪里:
- T:存储库管理的域类型(通常是实体/模型类名)
- ID:存储库管理的实体的 ID 类型(通常是在 Entity/Model 类中创建的 @Id 的包装类)
插图:
public interface BookRepo extends MongoRepository {}
方法
下面给出了 JpaRepository 中可用的一些最重要的方法
方法1: saveAll():保存所有给定的实体。
句法:
List saveAll(Iterable entities)
参数:实体,不得为 null,也不得包含 null。
返回类型:保存的实体;永远不会为空。返回的 Iterable 将与作为参数传递的 Iterable 具有相同的大小。
抛出异常:如果给定实体或其实体之一为空,则出现 IllegalArgumentException。
方法2: insert():插入给定的实体。假设实例是新的以便能够应用插入优化。使用返回的实例进行进一步的操作,因为保存操作可能已经完全改变了实体实例。
句法:
S insert(S entity)
参数:实体——不能为空
返回类型:保存的实体
方法3.findAll():返回该类型的所有实例。
句法:
Iterable findAll()
返回类型:所有实体
执行:
我们将制作一个 使用 MongoRepository 管理 Book 实体的 Spring Boot 应用程序。数据保存在 MongoDB 数据库中。我们使用 RESTful 控制器。
第一步:使用 IntelliJ IDEA 创建 Spring Boot 项目并创建 Spring Boot 项目。
第二步:添加以下依赖
- 春季网络
- MongoDB
- 龙目岛
- 开发工具
下面是pom.xml文件的完整代码。
XML
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.6.0
com.globallogic
spring-mongodb
0.0.1-SNAPSHOT
spring-mongodb
Demo project for Spring Boot
11
org.springframework.boot
spring-boot-starter-data-mongodb
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
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 Book File
// Importing required classes
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
// Annotations
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "Book")
// Class
public class Book {
// Attributes
@Id
private int id;
private String bookName;
private String authorName;
}
Java
// java Program to Illustrate BookRepo File
import com.globallogic.spring.mongodb.model.Book;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface BookRepo
extends MongoRepository {
}
Java
import com.globallogic.spring.mongodb.model.Book;
import com.globallogic.spring.mongodb.repository.BookRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
// Annotation
@RestController
// Class
public class BookController {
@Autowired
private BookRepo repo;
@PostMapping("/addBook")
public String saveBook(@RequestBody Book book){
repo.save(book);
return "Added Successfully";
}
@GetMapping("/findAllBooks")
public List getBooks() {
return repo.findAll();
}
@DeleteMapping("/delete/{id}")
public String deleteBook(@PathVariable int id){
repo.deleteById(id);
return "Deleted Successfully";
}
}
第 3 步:创建 3 个包并在这些包中创建一些类和接口,如下图所示
- 模型
- 存储库
- 控制器
Note:
- Green Rounded Icon ‘I’ Buttons are Interface
- Blue Rounded Icon ‘C’ Buttons are Classes
第 4 步:在实体包内
在 Book 中创建一个简单的 POJO 类。 Java文件。
Java
// Java Program to Illustrate Book File
// Importing required classes
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
// Annotations
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "Book")
// Class
public class Book {
// Attributes
@Id
private int id;
private String bookName;
private String authorName;
}
第 5 步:在存储库包中
创建一个简单的接口并将接口命名为BookRepo 。正如我们上面讨论的那样,这个接口将扩展MongoRepository 。
Java
// java Program to Illustrate BookRepo File
import com.globallogic.spring.mongodb.model.Book;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface BookRepo
extends MongoRepository {
}
第 6 步:在控制器包内
在包中创建一个名为BookController的类。
Java
import com.globallogic.spring.mongodb.model.Book;
import com.globallogic.spring.mongodb.repository.BookRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
// Annotation
@RestController
// Class
public class BookController {
@Autowired
private BookRepo repo;
@PostMapping("/addBook")
public String saveBook(@RequestBody Book book){
repo.save(book);
return "Added Successfully";
}
@GetMapping("/findAllBooks")
public List getBooks() {
return repo.findAll();
}
@DeleteMapping("/delete/{id}")
public String deleteBook(@PathVariable int id){
repo.deleteById(id);
return "Deleted Successfully";
}
}
第 7 步:下面是 application.properties 文件的代码
server.port = 8989
# MongoDB Configuration
server.port:8989
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=BookStore
第 8 步:在 MongoDB Compass 内部
转到您的 MongoDB Compass 并创建一个名为BookStore的数据库,并在该数据库中创建一个名为Book的集合,如下图所示
现在运行您的应用程序,让我们在 Postman 中测试端点,并参考我们的 MongoDB Compass。
在 Postman 中测试端点
端点 1: POST – http://localhost:8989/addBook
端点 2: GET - http://localhost:8989/findAllBooks
端点 3:删除 - http://localhost:8989/delete/1329
最后,MongoDB Compass 如下图所示,如下图所示: