当前位置: 首页 > 编程笔记 >

使用Spring Data R2DBC +Postgres实现增删改查功能

寿和通
2023-03-14
本文向大家介绍使用Spring Data R2DBC +Postgres实现增删改查功能,包括了使用Spring Data R2DBC +Postgres实现增删改查功能的使用技巧和注意事项,需要的朋友参考一下

在本教程中,我想向您展示如何通过带有Spring WebFlux的Spring Data R2DBC 执行各种Postgres CRUD操作。

R2DBC代表反应式关系数据库连接。

像JPA(Java持久性API)一样,R2DBC是关系数据库的反应性驱动程序的规范。由于它是一个单独的规范,因此请勿与JPA / Hibernate功能(如@OneToMany,@ManyToMany 等)比较。

我们将开发一个名为product-service的Spring Boot应用程序,该应用程序负责创建新产品/检索所有产品/删除或更新现有产品以执行R2DBC的各种Postgres CRUD操作。

实体类

@Data
@ToString
<b>public</b> <b>class</b> Product {

 @Id
 <b>private</b> Integer id;
 <b>private</b> String description;
 <b>private</b> Double price;
 
}

我们不能在此处添加@Entity,因为这不是JPA。

Spring Data反应性存储库

Spring Data照常进行所有繁重的工作。我们需要通过扩展ReactiveCrudRepository为我们的实体类创建一个存储库。

<b>import</b> org.springframework.data.repository.reactive.ReactiveCrudRepository;
<b>import</b> org.springframework.stereotype.Repository;

@Repository
<b>public</b> <b>interface</b> ProductRepository <b>extends</b> ReactiveCrudRepository<Product, Integer> {
}

CRUD操作

让我们创建一个服务类,以通过Spring Data Reactive Repository执行Postgres CRUD操作。

@Service
<b>public</b> <b>class</b> ProductService {

 @Autowired
 <b>private</b> ProductRepository repository;

 <b>public</b> Flux<Product> getAllProducts(){
 <b>return</b> <b>this</b>.repository.findAll();
 }

 <b>public</b> Mono<Product> getProductById(<b>int</b> productId){
 <b>return</b> <b>this</b>.repository.findById(productId);
 }

 <b>public</b> Mono<Product> createProduct(<b>final</b> Product product){
 <b>return</b> <b>this</b>.repository.save(product);
 }

 <b>public</b> Mono<Product> updateProduct(<b>int</b> productId, <b>final</b> Mono<Product> productMono){
 <b>return</b> <b>this</b>.repository.findById(productId)
  .flatMap(p -> productMono.map(u -> {
   p.setDescription(u.getDescription());
   p.setPrice(u.getPrice());
   <b>return</b> p;
  }))
  .flatMap(p -> <b>this</b>.repository.save(p));
 }

 <b>public</b> Mono<Void> deleteProduct(<b>final</b> <b>int</b> id){
 <b>return</b> <b>this</b>.repository.deleteById(id);
 }

}

REST API

现在是时候通过REST API公开服务了:

@RestController
@RequestMapping(<font>"product"</font><font>)
<b>public</b> <b>class</b> ProductController {

 @Autowired
 <b>private</b> ProductService productService;

 @GetMapping(</font><font>"all"</font><font>)
 <b>public</b> Flux<Product> getAll(){
 <b>return</b> <b>this</b>.productService.getAllProducts();
 }

 @GetMapping(</font><font>"{productId}"</font><font>)
 <b>public</b> Mono<ResponseEntity<Product>> getProductById(@PathVariable <b>int</b> productId){
 <b>return</b> <b>this</b>.productService.getProductById(productId)
    .map(ResponseEntity::ok)
    .defaultIfEmpty(ResponseEntity.notFound().build());
 }

 @PostMapping
 <b>public</b> Mono<Product> createProduct(@RequestBody Mono<Product> productMono){
 <b>return</b> productMono.flatMap(<b>this</b>.productService::createProduct);
 }

 @PutMapping(</font><font>"{productId}"</font><font>)
 <b>public</b> Mono<Product> updateProduct(@PathVariable <b>int</b> productId,
     @RequestBody Mono<Product> productMono){
 <b>return</b> <b>this</b>.productService.updateProduct(productId, productMono);
 }

 @DeleteMapping(</font><font>"/{id}"</font><font>)
 <b>public</b> Mono<Void> deleteProduct(@PathVariable <b>int</b> id){
 <b>return</b> <b>this</b>.productService.deleteProduct(id);
 }

}
</font>

配置

Spring Data反应驱动程序需要这样的配置才能连接到Postgres DB。

方法1:使用application.properties

spring.r2dbc.url=r2dbc:postgresql:<font><i>//localhost:5432/productdb</i></font><font>
spring.r2dbc.username=vinsguru
spring.r2dbc.password=admin
</font>

方法2:公开连接工厂bean

@Configuration
<b>public</b> <b>class</b> R2DBCConfig {

 @Bean
 <b>public</b> ConnectionFactory connectionFactory() {
 <b>return</b> ConnectionFactories.get(
  ConnectionFactoryOptions.builder()
   .option(DRIVER, <font>"postgresql"</font><font>)
   .option(HOST, </font><font>"localhost"</font><font>)
   .option(PORT, 5432)
   .option(USER, </font><font>"vinsguru"</font><font>)
   .option(PASSWORD, </font><font>"admin"</font><font>)
   .option(DATABASE, </font><font>"productdb"</font><font>)
   .option(MAX_SIZE, 40)
   .build());
 }

}
</font>

完整的源代码在这里。

到此这篇关于使用Spring Data R2DBC +Postgres实现增删改查功能的文章就介绍到这了,更多相关Spring Data R2DBC +Postgres实现增删改查内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍python用pickle模块实现“增删改查”的简易功能,包括了python用pickle模块实现“增删改查”的简易功能的使用技巧和注意事项,需要的朋友参考一下 pickle的作用: 1:pickle.dump(dict,file)把字典转为二进制存入文件. 2:pickle.load(file)把文件二进制内容转为字典 运行结果: 以上就是本文的全部内容,希望对大家的学习有所帮助,

  • 本文向大家介绍Node.js+Express+Mysql 实现增删改查,包括了Node.js+Express+Mysql 实现增删改查的使用技巧和注意事项,需要的朋友参考一下 这次选用nodejs+express+mysql 使用http作为客户端,express框架搭建服务端,从而实现数据的增删改查。这篇文章可以算作上篇文章的升级篇,加入了和数据库的交互。 安装 node 直接去官网下载选择下载

  • 一、前言 在第二章《Memcached源码分析 - Memcached源码分析之命令解析(2)》 和第三章《Memcached源码分析 - Memcached源码分析之消息回应(3)》 中我们主要通过Memcached的get命令,分析了Memcached的命令解析和消息回应的模块功能。这一章,我们主要来详细看一下Memcached常用的增删改查操作。 在看Memcached的增删改查操作前,我们

  • 本文向大家介绍BootstrapTable与KnockoutJS相结合实现增删改查功能【一】,包括了BootstrapTable与KnockoutJS相结合实现增删改查功能【一】的使用技巧和注意事项,需要的朋友参考一下 Bootstrap是一个前端框架,解放Web开发者的好东东,展现出的UI非常高端大气上档次,理论上可以不用写一行css。只要在标签中加上合适的属性即可。 KnockoutJS是一个

  • 本文向大家介绍BootstrapTable与KnockoutJS相结合实现增删改查功能【二】,包括了BootstrapTable与KnockoutJS相结合实现增删改查功能【二】的使用技巧和注意事项,需要的朋友参考一下 在上篇文章给大家介绍了BootstrapTable与KnockoutJS相结合实现增删改查功能【一】,介绍了下knockout.js的一些基础用法。接下来通过本文继续给大家介绍。如

  • 本文向大家介绍PHP+MYSQL实现用户的增删改查,包括了PHP+MYSQL实现用户的增删改查的使用技巧和注意事项,需要的朋友参考一下 文件列表。。文件内容。。 dbconn.php userListt.php editUser.php editDo.php detailUser.php deleteUser.php addUser.php addDo.php <dbconn.php> <user