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<User, String> {
}
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 - 检测关闭的连接