212. Spring Boot WebFlux:响应式Spring Data之MongoDB

Posted SpringBoot

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了212. Spring Boot WebFlux:响应式Spring Data之MongoDB相关的知识,希望对你有一定的参考价值。

【视频&交流平台】

SpringBoot视频:http://t.cn/R3QepWG

Spring Cloud视频:http://t.cn/R3QeRZc

SpringBoot Shiro视频:http://t.cn/R3QDMbh

SpringBoot交流平台:http://t.cn/R3QDhU0

SpringBoot 2.0 SpringData和JPA视频:

http://t.cn/R1pSojf

 

说明

(1)JDK版本:1.8

(2)Spring Boot 2.0.5

 

需求缘起

       在上一篇博客中我们对于WebFlux编写了一个简单的Hello World,然而绝大多数系统免不了要与数据库进行交互,所以我们也需要响应式的持久层API和支持异步的数据库驱动。

各个数据库都开始陆续推出异步驱动,目前SpringData支持的可以进行响应式数据访问的数据库有MongoDB、Redis、Apache Cassandra和CouchDB。今天我们用MongoDB来写一个响应式demo。

一、响应式Spring Data之MongoDB

       本例子是基于上一篇文章的例子进行编码。

1.1 添加依赖

在POM中增加Spring Data Reactive Mongo的依赖:

<dependency>

     <groupId>org.springframework.boot</groupId>

             <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>

</dependency>

 

1.2 创建实体类

       我们创建一个User实体类,这里使用@Document注解,使用@Id标注这是一个主键。

@Document

public class User {



    @Id

    private String id;

    private String phone;

    private String email;

    private String name;

    public String getId() {

       return id;

    }

     //省略setter and getter…

}

 

1.3 创建Repository

与非响应式Spring Data的CrudReposity对应的,响应式的Spring Data也提供了相应的Repository库:ReactiveCrudReposity,当然,我们也可以使用它的子接口ReactiveMongoRepository。

public interface UserRepository extends ReactiveCrudRepository<UserString{



}

 

1.4 创建Service

       由于业务逻辑几乎为零,只是简单调用了DAO层:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;


     public Mono<User> save(User user) {
         return userRepository.save(user); 
     }

    public Mono<Void> deleteById(String id) {
        return userRepository.deleteById(id);
    }

    public Mono<User> findById(String id) {
        return userRepository.findById(id);
    }

    public Flux<User> findAll() {
        return userRepository.findAll();
    }

}

 

1.5 创建Controller

       Controller层是直接调用了Service层代码,也比较简单:

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/save")
    public Mono<User> save(User user) {
        return this.userService.save(user);
    }

    @GetMapping("/deleteById")
    public Mono<Void> deleteById(String id) {
        return this.userService.deleteById(id);
    }

    @GetMapping("/findById")
    public Mono<User> findById(String id) {
        return this.userService.findById(id);
    }

    @GetMapping("/findAll")
    public Flux<User> findAll() {
        return this.userService.findAll();
    }
}

 

1.6 启动应用测试一下

(1)添加数据:

添加三条数据:

http://127.0.0.1:8080/user/save?id=1&name=张三

http://127.0.0.1:8080/user/save?id=2&name=李四

http://127.0.0.1:8080/user/save?id=3&name=王五

(2)查看所有数据:



(3)删除数据:

(4)通过id查询:


历史相关文章:



à悟空学员:http://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

以上是关于212. Spring Boot WebFlux:响应式Spring Data之MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

1 个 Spring Boot 应用程序中的 Spring mvc 和 webflux

服务器使用 Spring Boot 和 WebFlux 发送事件

原始性能表格 - Spring Boot 2 Webflux vs. Spring Boot 1

Spring Boot Webflux/Netty - 检测关闭的连接

如何在 Spring boot 2 + Webflux + Thymeleaf 中配置 i18n?

spring-boot-webflux 中未使用配置的 ObjectMapper