使用Spring Data R2DBC +Postgres實現增刪改查 - vinsguru
在本教程中,我想向您展示如何透過帶有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<Product, Integer> { } |
CRUD操作
讓我們建立一個服務類,以透過Spring Data Reactive Repository執行Postgres CRUD操作。
@Service public class ProductService { @Autowired private ProductRepository repository; public Flux<Product> getAllProducts(){ return this.repository.findAll(); } public Mono<Product> getProductById(int productId){ return this.repository.findById(productId); } public Mono<Product> createProduct(final Product product){ return this.repository.save(product); } public Mono<Product> updateProduct(int productId, final Mono<Product> 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<Void> 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<Product> getAll(){ return this.productService.getAllProducts(); } @GetMapping("{productId}") public Mono<ResponseEntity<Product>> getProductById(@PathVariable int productId){ return this.productService.getProductById(productId) .map(ResponseEntity::ok) .defaultIfEmpty(ResponseEntity.notFound().build()); } @PostMapping public Mono<Product> createProduct(@RequestBody Mono<Product> productMono){ return productMono.flatMap(this.productService::createProduct); } @PutMapping("{productId}") public Mono<Product> updateProduct(@PathVariable int productId, @RequestBody Mono<Product> productMono){ return this.productService.updateProduct(productId, productMono); } @DeleteMapping("/{id}") public Mono<Void> 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()); } } |
完整的原始碼在這裡。
相關文章
- SpringMVC+Spring Data JPA實現增刪改查操作SpringMVC
- Spring Boot 中使用 MongoDB 增刪改查Spring BootMongoDB
- Entity Framework使用DBContext實現增刪改查示例FrameworkContext
- 運用layui實現增刪改查UI
- js實現表格的增刪改查JS
- spring data mongodb 如何以事物的方式進行增刪改查SpringMongoDB
- 使用express+mongoose對mongodb實現增刪改查操作ExpressMongoDB
- 使用Mongoose類庫實現簡單的增刪改查Go
- Go實現對MySQL的增刪改查GoMySql
- 單連結串列實現增刪改查
- 封裝模組實現商品增刪改查封裝
- FMDB | 實現資料的增刪改查
- 看Zepto如何實現增刪改查DOM
- rust sqlx 使用---增刪改查RustSQL
- 增刪改查
- Spring+SpringMVC+Mybatis實現增刪改查--(七)總結篇SpringMVCMyBatis
- Java實現簡單的增刪改查操作Java
- Node.js+Express+Mysql 實現增刪改查Node.jsExpressMySql
- jQuery實現購物車的增刪改查jQuery
- Mybatis-plus實現簡單增刪改查MyBatis
- 使用Spring整合Hibernate,並實現對資料表的增、刪、改、查的功能Spring
- 在Spring data中使用r2dbcSpring
- indexedDB 增刪改查Index
- SQL增刪改查SQL
- mysql增刪改查MySql
- Mongoose查增改刪Go
- FMDB增刪改查
- mysql增查刪改MySql
- koa+mysql實現增刪改查-全棧之路MySql全棧
- webpack4+express+mongodb+vue 實現增刪改查WebExpressMongoDBVue
- 第一個mybatis程式,實現增刪改查CRUDMyBatis
- mybatis實現MySQL資料庫的增刪改查MyBatisMySql資料庫
- JDBC連線mysql-8.0實現增刪改查JDBCMySql
- 連線資料庫並實現增、刪、改、查資料庫
- .NET使用P/Invoke來實現登錄檔的增、刪、改、查功能
- MongoDB——簡單增、刪、改、查實踐MongoDB
- 使用Spring Boot實現Redis事務 | VinsguruSpring BootRedis
- Node+Vue實現對資料的增刪改查Vue