洞察探索如何利用兼容微信生态的小程序容器,实现跨平台开发,助力金融和车联网行业的数字化转型。
1119
2023-02-08
使用Spring Data R2DBC +Postgres实现增删改查功能
在本教程中,我想向您展示如何通过带有Spring WebFlux的Spring Data R2DBC 执行各种Postgres CRUD操作。
R2DBC代表反应式关系数据库连接。
像JPA(java持久性API)一样,R2DBC是关系数据库的反应性驱动程序的规范。由于它是一个单独的规范,因此请hzClP勿与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
return this.repository.findAll();
}
public Mono
return this.repository.findById(productId);
}
public Mono
return this.repository.save(product);
}
public Mono
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
return this.repository.deleteById(id);
}
}
REST API
现在是时候通过REST API公开服务了:
@RestController
@RequestMapping("product")
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping("all")
public Flux
return this.productService.getAllProducts();
}
@GetMapping("{productId}")
public Mono
return this.productService.getProductById(productId)
.map(ResponseEntity::ok)
.defaultIfEmpty(ResponseEntity.notFound().build());
}
@PostMapping
public Mono
return productMono.flatMap(this.productService::createProduct);
}
@PutMapping("{productId}")
public Mono
@RequestBody Mono
return this.productService.updateProduct(productId, productMono);
}
@DeleteMapping("/{id}")
public Mono
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());
}
}
完整的源代码在这里。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~