栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot 入门教程之引入数据传输层的方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot 入门教程之引入数据传输层的方法

我们现在操作的数据直接就使用了实体类,假如我们输出的用户对象需要包含用户拥有的权限列表,那么我们怎么封装呢?

直接封装进实体类中显然不行,因为实体类的职责就是提供与数据库表字段一一对应的映射关系,所以我们还需要封装出一层数据传输层 DTO(Data Transfer Object),通过它暴露给外部,这样我们就能高度定制化我们需要输出的数据而不会影响到实体类。

在项目中创建 dto 目录,新建 UserDto.java 文件:

package com.foxescap.wxbox.dto;

import lombok.Data;

import java.time.LocalDateTime;


@Data
public class UserDto {
 private String username;

 private LocalDateTime expiredAt;

 private LocalDateTime createdAt;
 
 private List roles;
}

结构看上去基本和对应的实体类非常相似,职责区别就是:

• 我不想暴露出去的字段可以直接不声明。

• 我可以加如其他的 DTO 作为其中的属性,如上所示。

对应我们的 Service 层就需要在拿到实体类对象后转换成 DTO 对象:

public UserDto findByUsername(String username) {
 var user = lambdaQuery().eq(User::getUsername, username).one();
 var userDto = new UserDto();
 userDto.setUsername(user.getUsername());
 userDto.setExpiredAt(user.getExpiredAt());
 userDto.setCreatedAt(user.getCreatedAt());

 return userDto;
}

这里你会发现,这个转换的过程特别难受,就像写 Getter 和 Setter 方法一样,写多了要吐了。

我会写吐别人也一样会写吐,然后就会有轮子造出来,modelmapper就是解决这样需求的一个用的人比较多的轮子。

在 pom.xml 项目配置文件中的 dependencies 中加入 modelmapper 依赖:


 org.modelmapper
 modelmapper
 2.3.7

然后在 config 目录中的 WebMvcConfig.java 文件中注入这个对象:

@Bean
public ModelMapper modelMapper() {
 ModelMapper modelMapper = new ModelMapper();

 modelMapper.getConfiguration().setFullTypeMatchingRequired(true);
 modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);

 return modelMapper;
}

我们这个时候再来改造一下 findByUsername 方法:

private final ModelMapper modelMapper;

public UserService(ModelMapper modelMapper) {
 this.modelMapper = modelMapper;
}

public UserDto findByUsername(String username) {
 var user = lambdaQuery().eq(User::getUsername, username).one();

 return modelMapper.map(user, UserDto.class);
}

到此这篇关于SpringBoot 入门教程之引入数据传输层的方法的文章就介绍到这了,更多相关SpringBoot 引入数据传输层内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/133183.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号