使用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
public class Product {

 @Id
 private Integer id;
 private String description;
 private Double price;
 
}

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

Spring Data反应性存储库

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

import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductRepository extends ReactiveCrudRepository {
}

CRUD操作

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

@Service
public class ProductService {

 @Autowired
 private ProductRepository repository;

 public Flux getAllProducts(){
 return this.repository.findAll();
 }

 public Mono getProductById(int productId){
 return this.repository.findById(productId);
 }

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

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

 public Mono deleteProduct(final int id){
 return this.repository.deleteById(id);
 }

}

REST API

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

@RestController
@RequestMapping("product")
public class ProductController {

 @Autowired
 private ProductService productService;

 @GetMapping("all")
 public Flux getAll(){
 return this.productService.getAllProducts();
 }

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

 @PostMapping
 public Mono createProduct(@RequestBody Mono productMono){
 return productMono.flatMap(this.productService::createProduct);
 }

 @PutMapping("{productId}")
 public Mono updateProduct(@PathVariable int productId,
     @RequestBody Mono productMono){
 return this.productService.updateProduct(productId, productMono);
 }

 @DeleteMapping("/{id}")
 public Mono deleteProduct(@PathVariable int id){
 return this.productService.deleteProduct(id);
 }

}

配置

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

方法1:使用application.properties

spring.r2dbc.url=r2dbc:postgresql://localhost:5432/productdb
spring.r2dbc.username=vinsguru
spring.r2dbc.password=admin

方法2:公开连接工厂bean

@Configuration
public class R2DBCConfig {

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

}

完整的源代码在这里。

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

你可能感兴趣的:(使用Spring Data R2DBC +Postgres实现增删改查功能)