DTO介绍

 先看看这张图,dto所处位置,主要是用于业务逻辑层service和表示层servlet之间的数据传输

什么是DTO(Data Transfer Object)数据传输对象?

DTO是一个比较特殊的对象,他有两种存在形式:

在后端,他的存在形式是java对象,也就是在controller里面定义的那个东东,通常在后端不需要关心怎么从json转成java对象的,这个都是由一些成熟的框架帮你完成啦,比如spring框架

在前端,他的存在形式通常是js里面的对象(也可以简单理解成json),也就是通过ajax请求的那个数据体。

DTO主要用于服务层与控制层之间的数据传输

DTO只取它所需要的字段,也可以定义需要但是数据库中不存在的数据。

一般我们使用DTO类来继承entity实体类,在DTO类里放一些业务字段,并提供get、set方法。

使用DTO的优点

1.依据现有的类代码,即可方便的构造出DTO对象,而无需重新进行分析。

2.减少请求次数,大大提高效率。

3.按需组织DTO对象,页面需要的字段我才组织,不需要的我不组织,可以避免传输整个表的字段,一定程度上提高了安全性。

DTO转实体类

方法1:

一般来说,在我们实际的开发过程,不能直接使用DTO,要转成实体类才能进行使用。

导入依赖:

<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> </dependency>

在mappers包下创建AdminBankDtoMappers接口

MapStruct之@Mapper注解的用法 - 知乎 (zhihu.com)

@Mapper(componentModel="spring") public interface AdminBankDtoMappers{ AdminBankDtoMappers INSTANCE = Mappers.getMapper(AdminBankDtoMappers.class); //dto转实体类 AdminBank toConverEntity(AdminBankDto source); //实体类转dto AdminBankDto toConverDto(AdminBank source); //泛型转泛型 List<AdminBank> toConverEntity(List<AdminBankDto> source); List<AdminBankDto> toConverDto(List<AdminBank> source); }

如果说mappers第一次编译后,进行第二次编译失败,就需要删除mappers,重新写一个mappers,编译后生成的实现类是在idea中看不到的

编译键:

方法2:

关于Spring中的BeanUtils工具类的说明

Spring--BeanUtils工具类--使用/实例 - 知乎 (zhihu.com)

这里对于商品类型表,货车类型表,商品类型与货车类型关联表进行一个举例,通过前面两张表,生成一个的商品类型的时候,同时也要生成一个商品类型与货车类型关联的字段,这个时候需要用到dto,在这里dto相较于商品类型实体类中多了个货车类型id,体现了dto的优势

  1. 创建实体类对象
  2. 将dto的成员对象赋值给实体类,就是将要新增的数据赋值给这个实体类,通过实体类去做操作
  3. 调用商品类型服务中的新增方法,为什么不用mp中的save方法,是因为mp中的save方法生成的id都是自动增长的那种。自己定义的新增方法中需要使用雪花算法对id进行随机分配,也可以实现save方法进行修改
  4. 得到商品类型id
  5. 当货车类型不为空时,调用货车类型与商品类型相关联服务的批量新增方法。从dto里拿到货车类型id,进行stream流处理,通过map把货车类型id与商品类型id关联起来,返回出去,转为list
  6. 最后把实体类的成员对象赋值给dto,加好货车id与商品id之间的关联后,又赋值回去,再去做下一步的操作
  7. 最后返回dto

自定义的货物类型新增方法

关于其它的vo,bo,po,do等可以看看知乎的这篇文章

一篇文章讲清楚VO,BO,PO,DO,DTO的区别 - 知乎 (zhihu.com)

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值