Spring Boot教程之四十九:Spring Boot – MongoRepository 示例
Spring Boot – MongoRepository 示例
Spring Boot 建立在 Spring 之上,包含 Spring 的所有功能。由于其快速的生产就绪环境,使开发人员能够直接专注于逻辑,而不必费力配置和设置,因此如今它正成为开发人员的最爱。Spring Boot 是一个基于微服务的框架,在其中创建生产就绪的应用程序只需很少的时间。以下是 Spring Boot 的一些功能:
- 它可以避免 Spring 中繁重的 XML 配置
- 它可以轻松维护和创建 REST 端点
- 它包括嵌入式 Tomcat 服务器
- 部署非常容易,war和jar文件可以轻松部署在tomcat服务器中
MongoRepository介绍
MongoRepository 来管理 Spring Boot 应用程序中的数据
MongoRepository 是 Spring Data 在org.springframework.data.mongodb.repository包中提供的一个接口。MongoRepository 扩展了PagingAndSortingRepository和QueryByExampleExecutor接口,这两个接口进一步扩展了CrudRepository接口。MongoRepository 提供了创建 CRUD 应用程序所需的所有方法,并且还支持自定义派生查询方法。
句法:
public interface MongoRepository<T,ID> extends PagingAndSortingRepository<T,ID>, QueryByExampleExecutor<T>
这里:
- T:存储库管理的域类型(通常是实体/模型类名)
- ID:存储库管理的实体的 id 类型(通常是在实体/模型类中创建的 @Id 的包装类)
插图:
public interface BookRepo extends MongoRepository<Book, Integer> {}
方法
JpaRepository 中的一些最重要的方法如下
方法 1: saveAll():保存所有给定的实体。
句法:
<S extends T> List<S> saveAll(Iterable<S> entities)
参数:实体,不能为空,也不能包含空。
返回类型:已保存的实体;永远不会为空。返回的 Iterable 将具有与作为参数传递的 Iterable 相同的大小。
抛出异常:如果给定的实体或其某个实体为空,则抛出IllegalArgumentException 。
方法 2: insert():插入给定的实体。假设实例是新的,以便能够应用插入优化。使用返回的实例进行进一步的操作,因为保存操作可能已经完全改变了实体实例。
句法:
<S extends T> S insert(S entity)
参数:entity – 不能为空
返回类型:已保存的实体
方法3. findAll():返回该类型的所有实例。
句法:
Iterable<T> findAll()
返回类型:所有实体
执行:
我们将制作一个 Spring Boot 应用程序,使用 MongoRepository 管理 Book 实体。数据保存在 MongoDB 数据库中。我们使用 RESTful 控制器。
步骤1:使用IntelliJ IDEA创建Spring Boot项目,创建一个Spring Boot项目。
第 2 步:添加以下依赖项
- Spring Web
- MongoDB
- Lombok
- DevTools
以下是pom.xml文件的完整代码。
- XML
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.0</version> <relativePath/> <!-- lookup parent from repository --> </parent>
<groupId>com.globallogic</groupId> <artifactId>spring-mongodb</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-mongodb</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build>
</project> |
步骤 3:创建 3 个包并在这些包中创建一些类和接口,如下图所示
- model
- repository
- controller
注意:
- 绿色圆形图标“I”按钮是界面
- 蓝色圆形图标“C”按钮属于类
步骤 4:实体包内部
在 Book.java 文件中创建一个简单的POJO 类。
- 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<Book, Integer> { } |
步骤 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<Book> 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。