springboot第一集:由springboot的dto拓展的内容
创始人
2025-05-30 14:08:19

DTO: Data Transfer Object. 通常是在 OpenApi . 即此项目与其他外界项目交互时使用的对象.

在Spring Boot应用程序中,数据传输对象(DTO)最常用于表示业务模型对象或从应用程序或其服务端点传递的数据模型对象。DTO将这些模型对象中的数据转换为一种便于传输和有效处理的格式。

通常情况下,DTO具有以下几个作用:

  1. 将业务模型对象的详细信息隐藏起来,以便在应用程序的客户端和服务端之间进行数据传输。

  2. 将多个模型对象合并为一个DTO对象,以便简化数据交换和处理过程。

  3. 通过将某些模型对象属性的转换或计算封装到DTO中,可以抽象化服务端点之间的数据处理逻辑。

  4. 最终,提供一个整体的清晰,不分双方,简单的数据传输结构。

  5. 同样,DTO在优化性能方面也起到了很大的作用。

而Spring Boot可以通过各种注释来高效地创建和使用DTO,这些注释包括@Data@Getter@Setter@NoArgsConstructor@AllArgsConstructor等。通过这些注释,可以自动化DTO中的许多任务,这有效地简化了DTO的创建和维护。

@Getter
@Setter
@TableName("user")
@ApiModel(value="user_boookdto", description = "")
public class User_BookDto implements Serializable {private static final long serialVersionUID = 1L;@TableId("uid")private String uid;@TableField("uname")private String uname;@TableField("bname")private String bname;@TableField("author")private String author;@TableField("info")private String info;@TableField("imgpos")private String imgpos;
}

在Service里写好方法,然后在impl里面实现

public interface BookService extends IService {User_BookDto getDataByUserAndBook(User_BookDto user_bookDto);
}

实现service

根据前端传过来的数据获取这两个表中的所有信息,然后使用对象拷贝,将两个表中的数据对象拷贝到 dto,最后返回 dto 即可

@Service
public class BookServiceImp extends ServiceImpl implements BookService {@Autowiredprivate UserService userService;@Overridepublic User_BookDto getDataByUserAndBook(User_BookDto user_bookDto) {// 获取书的所有信息LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Book::getBname, user_bookDto.getBname());Book book12 = this.getOne(queryWrapper);// 获取用户的所有信息LambdaQueryWrapper queryWrapper2 = new LambdaQueryWrapper<>();queryWrapper2.eq(User::getUname, user_bookDto.getUname());user user12 = userService.getOne(queryWrapper2);// 对象拷贝,将book和user拷贝到user_bookDtoBeanUtils.copyProperties(book12, user_bookDto);BeanUtils.copyProperties(user12, user_bookDto);return user_bookDto;}
}

最后,在 controller 里调用 service 写好的方法即可

@PostMapping("/getub")
public Result getBook(@RequestBody User_BookDto user_bookDto) {user_bookDto = bookService.getDataByUserAndBook(user_bookDto);return Result.success("", user_bookDto);
}

在Spring Boot中,DTO(Data Transfer Object)是一种对象,用于在各个层之间传递数据。它们通常包含在应用程序中的控制器或服务中,并用于处理RESTful API或Web应用程序中的HTTP请求和响应数据。

DTO可以根据需要进行拓展,以满足不同应用程序的要求。以下是可以拓展DTO的一些内容:

  1. Validation 校验

Spring Boot DTO可以使用Bean Validation框架来校验请求数据的格式和有效性。例如,你可以通过在DTO字段上添加@NotBlank和@Email注解来确保输入的字符串不为空并符合电子邮件地址格式。

  1. Mapping 映射

使用映射技术可以将一个DTO对象映射到另一个DTO对象,或将DTO对象映射到数据库中的实体对象。例如,你可以使用MapStruct、Dozer或ModelMapper等框架来实现DTO映射功能。

  1. Builder 构建

使用Builder模式创建DTO对象可以减少代码的重复程度。通过使用Builder模式,你可以更简单地构建DTO对象,而不必手动编写大量的构造函数和setter方法。具体来说,你可以使用Lombok来自动生成DTO对象的构建器。

  1. Pagination 分页

在Web应用程序中,常常需要对大量数据进行分页显示。DTO可以包含信息,例如当前页码、页面大小、总数等,以支持分页实现。可以使用Spring Boot默认的Pageable对象、Mybatis PageHelper插件等来实现分页。

  1. Custom Formatting 自定义格式

有些情况下,DTO对象需要显示更复杂的数据结构,例如日期时间转换、数字格式化等。你可以使用Spring Boot中提供的自定义格式注解来实现DTO的自定义格式。例如,对于日期的处理需要使用@DateTimeFormat(pattern = "yyyy-MM-dd")注解进行标记。

  1. Conversion 转换

有时候,我们需要将DTO中的一些属性从一种类型转换成另一种类型,例如将字符串转换成数字,或将日期字符串转换为Date对象。你可以使用Spring Boot中的ConversionService来实现这种类型的转换。

  1. Localization 本地化

如果你的应用程序需要支持多个国家或地区的语言,那么DTO可以包含属性键、相应的值和区域设置信息,来支持不同的本地化需求。你可以使用Spring Boot的国际化支持来实现这个目标。

  1. DTO Projection 投影

DTO Projection允许我们选择DTO中的特定属性,并将这些属性映射到视图中。这可以减少不必要的数据传输和处理,从而提高应用程序的性能。你可以使用Spring Boot中的Projection注解来实现DTO的投影。

  1. HATEOAS支持

如果你正在构建RESTful API,则可以将DTO与HATEOAS(Hypertext As The Engine Of Application State)相结合,以允许客户端使用API返回的链接来导航应用程序。你可以使用Spring Boot中的Spring HATEOAS框架来实现这种类型的DTO扩展。

Spring Boot的DTO(数据传输对象)通常是一个POJO(简单Java对象),主要用于在不同层之间传递数据,以及将数据库实体转换为更易于处理的对象。DTO包含以下内容:

  1. 可读/可写属性:DTO包含用于表示数据的可读/可写属性,具有getter和setter方法。

  2. 静态工厂方法:DTO通常具有静态工厂方法,用于创建DTO对象。

  3. 序列化支持:DTO需要支持序列化和反序列化,以便它们可以在应用程序各个层之间进行传输。

  4. Bean验证注解:DTO可以包含Bean验证注解,用于在传输数据之前验证数据的完整性。

  5. 映射注解:DTO可以使用映射注解(例如@Mapper或@Mapping)将DTO属性映射到其他对象的属性。

  6. Spring validation支持:DTO可以使用Spring验证框架进行自定义验证。

总之,Spring Boot的DTO是具有可读/可写属性、静态工厂方法、序列化支持、Bean验证注解、映射注解和Spring验证支持的简单Java对象,用于在不同层之间传输数据。

相关内容

热门资讯

实用的 PyYAML 使用技巧 AML 是一个被广泛使用的数据序列化和配置语言,作为一个开发者,总是不免...
C语言学习之路--指针篇 目录一、前言二、指针一、指针是什么1、指针的重要理解2、指针变量3、其他问题二、指针和指针类型1、指...
最牛,狂赚近70%! 最牛,狂... 【导读】前5月主动权益类基金平均净值增长率为2.43%,最牛业绩逼近70%中国基金报记者 方丽 曹雯...
电容笔和Apple penci... 跟Apple Pencil最主要不同,市场上大部分的电容笔都没有重力的压感࿰...
便携制氧机方案——PCBA/芯...   便携制氧机采用分子筛的吸附性能,通过物理原理,以无油压缩机为动力&#...
考研复试——离散数学 三年疫情都没有笔试,今年恢复,大概率会有笔试。 2023年3月19号&#...
分布式任务处理XXL-JOB 分布式任务处理XXL-JOB 什么是分布式任务调度 对一个视频的转码可以理解为一个任务的执行...
DirectX12(D3D12... 目录1、前言1.1、一些感慨1.2、运行效果展示1.3、示例简介1.4、示例操作说明1.5、本章内容...
小红书运营工具有哪些?新手运营...   很多人多多少少都会觉得小红书运营有一定的难度。但是其实在解决这些难题的时候,我们也...
Jetson NX 配置 py... Jetson NX 配置pytorch 参考文档 官方教程–还得是官方啊 参考博客1 参考博客...
c++ error:cross... 最近在写代码的时候,碰到了 crosses initialization of ......
XShell安装配置教程及云服... 目录一、 XShell的作用二、 下载XShell1.访问XShell官网,填写姓名和...
五年五任!道通科技任命90后董... 【高管动态】深圳市道通科技股份有限公司的董秘,也许是最不好干的岗位之一了。根据道通科技(600208...
C++初阶——前言 目录 1. 什么是C++ 2. C++的发展史 3. C+&...
每周股票复盘:西部矿业(601... 截至2025年5月30日收盘,西部矿业(601168)报收于15.8元,较上周的16.07元下跌1....
特朗普癫了?突然反咬中美贸易协... 知道他会反口,没想到这么快反口。不然为什么叫“疯王”呢?从昨晚到现在,特朗普又搞出三件大事:反咬中国...
DevOps是什么?DevOp... 目录专栏导读一、DevOps是什么?二、为什么会出现DevOps?1、容...
“石家庄富豪”要签50亿美元大... 频繁资产腾挪,收效如何? 作者 | 伍玥 编辑丨高岩 来源 | 野马财经 创新生物医药的出海热潮正在...
【零基础入门SpringBoo... 一、上手第一个程序 1、系统要求 此处以我自己使用的版本为例,在后期学习过程中遇到一...
马斯克黯然下课,临走前给特朗普... 黯然下课,马斯克要走了。5月底,马斯克正式宣布,即将卸任“政府效率部”部长职务,为其在特朗普政府的任...
Scala函数式编程 一、基本函数编程 在Scala 中函数式编程和面向对象编程完美融合在一起了 1 基础概念 1&#...
ChatGPT-4 前两天推出 ChatGPT-4,其创建者 OpenAI 展示了该机器人的增强功能——包...
UEFI 基础教程 (十三) ... 一、 修改UEFI UiApp源代码 修改 FrontPageStrings.uni 与 Front...
首进品牌超30%,餐饮选址新风... 总第4232期作者 |餐饮老板内参内参君逃离商场的餐饮人,正把店开到“高质价比商业体”“可能要撤店了...
94:二叉树的中序遍历 94:二叉树的中序遍历 总结 给定一个二叉树的根节点 root ,返...
03 - 初识Linux进程 ---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接:(更新中&...
中年男人又一宝?新型护肝科技一... 凌晨一点的上海陆家嘴,写字楼里依然灯火通明。30岁互联网大厂产品经理张磊目不转睛盯着电脑屏幕,手机健...
零入门kubernetes网络... 《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7...
“一部手机游景区”,带你玩转V... “一部手机游景区”已经不再是一个概念,现在各地纷纷大力发展VR智慧景区,...
Pytorch学习笔记--多G... 目录 1--前言 2--报错代码 3--解决方法 1--前言         最近在复现一篇 Pa...