首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >反应堆:如何将实体的通量转换为DTO对象的通量

反应堆:如何将实体的通量转换为DTO对象的通量
EN

Stack Overflow用户
提问于 2019-11-03 19:05:00
回答 2查看 8.1K关注 0票数 9

我有一个用户实体和一个角色实体。除了用户实体有一个与其各自角色的id相对应的role_id字段之外,字段并不重要。由于Spring R2DBC没有在实体之间执行任何形式的关系,所以我转而使用DTO方法。作为一个整体,我对R2DBC和反应性编程非常陌生,我不知道如何将Flux<User> --我的存储库的findAll()方法--返回到Flux<UserDto>。我的UserDto类非常简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
@RequiredArgsConstructor
public class UserDto 
{
    private final User user;

    private final Role role;
}

下面是我要做的UserMapper类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Service
@RequiredArgsConstructor
public class UserMapper 
{
    private final RoleRepository roleRepo;

    public Flux<UserDto> map(Flux<User> users)
    {
        //???
    }
}

如何使此映射程序将Flux<User>转换为包含用户各自角色的Flux<UserDto>

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-04 00:10:02

假设您的RoleRepository有一个findById()方法或类似的方法来查找给定其ID的Role,并且您的用户对象有一个getRoleId(),那么您可以通过一个标准的映射调用来完成它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return users.map(u -> new UserDto(u, roleRepo.findById(u.getRoleId())));

或者在findById()返回Mono的情况下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return users.flatMap(u -> roleRepo.findById(u.getRoleId()).map(r -> new UserDto(u, r)));

当然,如果getRoleId()可能返回null,您可能希望添加额外的检查。

票数 6
EN

Stack Overflow用户

发布于 2020-08-08 17:01:43

将数据从业务对象转换为数据库对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static UserDAO covertUserBOToBUserDAO(UserBO userBO){
    return new UserDAO(userBO.getUserId(), userBO.getName(), userBO.getMobileNumber(), 
     userBO.getEmailId(), userBO.getPassword());
}

将数据从数据库对象转换为业务对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static Mono<UserBO> covertUserDAOToBUserBO(UserDAO userDAO){
    return Mono.just(new UserBO(userDAO.getUserId(), userDAO.getName(), 
     userDAO.getMobileNumber(), userDAO.getEmailId(), userDAO.getPassword()));
}

现在在服务中(getAllUsers)异步:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Flux<UserBO> getAllUsers(){
        return userRepository.findAll().flatMap(UserService::covertUserDAOToBUserBO);
}

,因为flatMap是异步的,所以我们可以从异步操作中获得好处,甚至可以将对象从DAO转换为BO.

类似地,如果保存数据,那么我尝试如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Mono<UserBO> saveUser(UserBO userBO)
{
        return 
 userRepository.save(covertUserBOToBUserDAO(userBO)).flatMap(UserService::covertUserDAOToBUserBO);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58686680

复制
相关文章
MSIL 静态类在 IL 定义上和非静态类的差别
本文来聊聊 MSIL 的基础知识,给一个 C# 的类标记了 static 之后和标记 static 之前,生成这个类的 IL 代码有什么不同
林德熙
2021/12/23
6330
【C++】运算符重载 ② ( 类内部定义云算符重载 - 成员函数 | 类外部定义运算符重载 - 全局函数 | 可重载的运算符 )
当使用 + 将 个对象相加时 , C++ 编译器会查找是否有定义运算符重载函数 ;
韩曙亮
2023/10/15
2710
Python中类-带括号与不带括号的区别
  有时候看到群里一些人问一些基础的知识,虽然很基础,网上随便一查即可知道,但是往往很多人就是连这些基础的知识都很模糊,甚至不清楚,这里再来复习一下python中类的一个知识点(仅此)。
全栈测试开发日记
2023/02/02
2.6K0
【C++】运算符重载 ⑬ ( 括号 () 运算符重载 | 完整代码示例 )
上述写法 , 与函数调用很像 , 只是 s 不是函数名 , 而是一个 对象的 名称 ;
韩曙亮
2023/10/15
4150
【C++】运算符重载 ⑬ ( 括号 () 运算符重载 | 完整代码示例 )
为什么 wait/notify/notifyAll 在 Object 类定义而不是 Thread 类?
作者:Yujiaao 来源:segmentfault.com/a/1190000019962661
Java技术栈
2020/06/16
1.5K0
面向对象定义一个hero类
定义一个hero类,属性有power,name,分别代表体力值和英雄的名字,体力值默认为100;方法有:1.行走的方法如果体力值为0,则输出不能行走,此英雌已死亡的信息;2.吃的方法:参数是补充的血量,将n的值加到属性power中,power的值最大为100;3.每收到一次伤害,体力值-10,体力值最小不能小于0.
算法与编程之美
2023/01/03
4730
面向对象定义一个hero类
编译原理在类Unix/Lunix上使用flex
flex,前身是lex,lex是1975年由Mike Lesk和当时尚在AT&T实习的Eric Schmidt共同完成的基于UNIX环境的词法分析器的生成工具。这个lex很有名气,但是无奈效率太低加上有bug,让人用的很不爽。后来伯克利实验室的Vern Paxson用C重新写了lex,并命名为flex(Fast Lexical Analyzer Generator)。
里克贝斯
2021/05/21
1K0
编译原理在类Unix/Lunix上使用flex
iOS 的系统类信息在栈上?
前言 今天有位群友抛出了一个很有意思的问题:为什么系统类的 class 地址比栈区变量更高? image-20210519235852843 iOS 进程内存布局 通常情况下,我们对进程内存的布局
酷酷的哀殿
2021/06/22
8150
iOS 的系统类信息在栈上?
shell中各种括号的作用(上)
1.命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。
陈不成i
2021/06/22
9090
latex在大括号里换行_大括号的解决问题
存在问题:在编译LaTex的时候,会出现存在大括号\left( \right),但是一旦公式过长需要换行时,例如
全栈程序员站长
2022/11/10
3.5K0
latex在大括号里换行_大括号的解决问题
Java|如何用Java定义一个类
类是一种引用数据类型。类为对象的模板,简单的说就是分类。类是一个模板,它描述一类对象的行为和状态。类的定义包括“成员变量”的定义和“方法”的定义,其中“成员变量”用于描述一类对象共同的数据结构。在Java语言中,类的成员变量的定义可以使用如下语法:
算法与编程之美
2019/09/25
1.1K0
Java|如何用Java定义一个类
重温Delphi之:如何定义一个类
先谈谈工具问题: 虽然d7很经典,但毕竟是02年出的开发工具了,对于习惯了vs2008被微软宠坏的.net程序员来讲,重返d7已经有点找不着感觉了(起码连最基本的代码折叠功能都没有),还好delphi
菩提树下的杨过
2018/01/23
1.3K0
重温Delphi之:如何定义一个类
定义一个创造汽车的工厂类
# 定义奔驰车类 class BenchiCar(object): # 定义车的方法 def move(self): print('---奔驰车在移动---') def stop(self): print('---奔驰车停车了---') # 定义宝马车类 class BMWCar(object): # 定义车的方法 def move(self): print('---宝马车在移动---') def stop(
汪凡
2018/05/29
4740
在ListView上使用自定义的Adapter
需要实现的东西是: 一个DataListViewAdapter,当进行如下调用时,就能在列表上显示出数据:
LeoXu
2018/08/15
9680
怎样在Visio中插入大括号?
在标注类形状中就可以找到大括号了。可以看到,系统默认配置了两种大括号类型:双侧大括号和单侧大括号,大家可以根据实际需要自己选择。
狼啸风云
2021/05/17
12.9K0
怎样在Visio中插入大括号?
在RenderTransform上叠加一个ScaleAt
代码很简单,就是在缩放时,获取鼠标对元素的相对坐标,调用ScaleAt,然后添加到它现有的RenderTransform中
黄腾霄
2020/06/10
5470
技术猿 | CoolDrive R6机器人专用伺服在工业机器人上的应用
---- 1、概述 近两年,面对人工劳动力成本的不断提升,工业机器人日益被企业倚重,中国工业机器人市场呈现爆发式增长。据国际机器人协会(IFR)数据统计,2014年全球工业机器人销量为22.5万台左右,其中亚洲的销量几乎占到2/3.而中国市场的工业机器人销量更是增长54%,达到5.6万台左右。但值得注意的是,本土机器人供应商的销量仅为1.6万台。究其原因,很重要的一个因素就是机器人核心零部件的国产化进程较慢,国内机器人整机厂商只能进口国外产品,导致整机成本较高,在同国外厂商的竞争中处于劣势。 Cool
机器人网
2018/04/19
9620
技术猿 | CoolDrive R6机器人专用伺服在工业机器人上的应用
在LeetCode中使用我们自定义的类
在上一节中我们使用的是java提供了的类,这一小节中我们就来学习一下如何在LeetCode中使用我们自定义的类。
wfaceboss
2019/04/08
1.2K0
在LeetCode中使用我们自定义的类
见到了“公司”定义一个Company类,那么见到了“字段”是不是也可定义一个Column类?
  既然见到了公司,我们可以定义一个Class Company ,那么我们见到了字段,是不是也可以定义一个Class ColumnInfo呢? 公司的描述信息类: 代码 public class Company     {         public int CompanyId { get; set; }         public string CompanyName { get; set; }         public string Province { get; set; }         
用户1174620
2018/02/26
8260
见到了“公司”定义一个Company类,那么见到了“字段”是不是也可定义一个Column类?
点击加载更多

相似问题

在R6类定义内部:“找不到对象”(或者:如何在R6类中定义“本地”对象)

113

如何告诉R6类如何处理方括号?

17

R,R6运算符重载

10

parLapply在R6类中

13

访问实例化另一个R6类的R6类的元素

217
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文