使用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实现增删改查内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何在Spring data中使用r2dbc详解

    前言 上篇文章我们讲到了怎么在Spring webFlux中使用r2dbc,今天我们看一下怎么使用spring-data-r2dbc这个Spring data对r2dbc的封装来进行r2dbc操作. 依赖关系 要使用Spring-datea-r2dbc需要配置下面的依赖关系: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp

  • spring-data-jpa实现增删改查以及分页操作方法

    有几个坑一定要注意: 实现删除操作的时候一定要在各层类中 增加 @Transactional 注释,否则会一直报错 在自己使用@Query定义操作时,会碰到编译器报错,这个时候只需要禁用QL的语法检查即可 以下是部分代码: //Repository package com.example.myproject.dao; import com.example.myproject.domain.User; import org.springframework.data.domain.Page; imp

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

    在本教程中,我想向您展示如何通过带有Spring WebFlux的Spring Data R2DBC 执行各种Postgres CRUD操作. R2DBC代表反应式关系数据库连接. 像JPA(Java持久性API)一样,R2DBC是关系数据库的反应性驱动程序的规范.由于它是一个单独的规范,因此请勿与JPA / Hibernate功能(如@OneToMany,@ManyToMany 等)比较. 我们将开发一个名为product-service的Spring Boot应用程序,该应用程序负责创建新产

  • spring boot集成mongodb的增删改查的示例代码

    添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> properties配置 spring.data.mongodb.host=127.0.0.1 spring.data.mongodb.port=27017 spring

  • Spring MVC实现mysql数据库增删改查完整实例

    最近刚学了springmvc框架,感觉确实方便了不少,减少了大量的冗余代码.就自己做了个小项目练练手,这是个初级的springmvc应用的项目,没有用到mybatis,项目功能还算完善,实现了基本的增删改查的功能. 项目环境: -系统:win10 -开发环境:eclipseOxygenReleaseCandidate3(4.7) -jdk版本:java1.8(121) -mysql:5.7 -spring:4.0 -tomcat:8.5 用到的技术: springmvcspringjspjdbc

  • Spring boot+mybatis+thymeleaf 实现登录注册增删改查功能的示例代码

    本文重在实现理解,过滤器,业务,逻辑需求,样式请无视.. 项目结构如下 1.idea新建Spring boot项目,在pom中加上thymeleaf和mybatis支持.pom.xml代码如下 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3

  • Spring Boot实现简单的增删改查

    在pom.xml添加相应的依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</gro

  • Spring框架+jdbcTemplate实现增删改查功能

    SpringMVC架构(Model(实体类),Service,Controller层) Controller(接收参数调用业务层)–>Service(调用持久层,处理业务逻辑)–>Dao(与数据库交互) 1. IOC(控制反转是一种设计思想而不是技术) DI(依赖注入):是IOC思想的一种技术实现 IOC容器是Spring提供的保存Bean对象的容器 Bean管理操作 1.Xml + 注解 2.javaConfig + 注解 通过xml配置Bean:TODO: 通过javaConfig 配置B

  • 使用SpringBoot开发Restful服务实现增删改查功能

    在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练.不过在看了很多关于SpringBoot的介绍之后,并没有想象中的那么难,于是开始准备学习SpringBoot. 在闲暇之余的时候,看了下SpringBoot实战以及一些大神关于SpringBoot的博客之后,开始写起了我的第一个SpringBoot的项目.在能够对SpringBoot进行一些简单的开发Re

  • jQuery+datatables插件实现ajax加载数据与增删改查功能示例

    本文实例讲述了jQuery+datatables插件实现ajax加载数据与增删改查功能.分享给大家供大家参考,具体如下: 这里给大家分享一下我在项目中用datatables实现ajax加载数据与增删改查 注意,需要引入jquery.datatables.layer html代码: <div class="thead"> <input placeholder="请输入搜索内容" id="searchTitle" type=&quo

  • SpringBoot+Vue+Axios+BootStrap实现图书的增删改查功能示例

    目录 一.开发工具 二.项目结构 三.编写项目 四.运行项目 由于是初学Vue.Axios,可能在界面和功能上存在着一些问题,但这些并不妨碍使用.如果有对编程感兴趣的朋友,可以试着做一做.这个由于是第一次做,不太熟练.在后续的过程中会不断的完善. 一.开发工具 IntelliJ IDEA Ultimate 2021.1 apache-maven-3.5.4 MySQL5.7 JDK 1.8.0_281 二.项目结构 三.编写项目 1.创建数据库 SET NAMES utf8mb4; SET FO

  • SpringBoot整合MybatisPlus实现增删改查功能

    目录 1.概述 2.引入依赖 3.配置连接信息 4.新建两个表 5.在项目中创建相应的实体类 5.1 创建基础实体类 5.2 SysDictType实体类 5.3 SysDictData实体类 6.创建DAO继承MybatisPlus增强接口 6.1 SysDictTypeMapper 6.2 SysDictDataMapper 7.进一步封装到Service层 7.1 定义Service接口中的抽象方法 7.2 实现Service接口中的方法 8.在控制层上进行增删改查操作 8.1 SysDi

随机推荐