当前位置: 首页 > wzjs >正文

青岛建站开发公司网络规划与设计

青岛建站开发,公司网络规划与设计,兰州企业网站建设,c 写网站建设框架在springboot3.4.4和jdk17环境下集成使用mapstruct MapStruct可以减少编码量&#xff0c;dto,entity相互转换时&#xff0c;自动生成set,get方法的调用。 源码地址&#xff1a;https://gitcode.com/qq_39339588/mapstruct.git 2025-04-21 一、maven依赖 <properties><…

在springboot3.4.4和jdk17环境下集成使用mapstruct

MapStruct可以减少编码量,dto,entity相互转换时,自动生成set,get方法的调用。
源码地址:https://gitcode.com/qq_39339588/mapstruct.git

2025-04-21

一、maven依赖

<properties><java.version>17</java.version><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target><org.projectlombok.version>1.18.16</org.projectlombok.version><org.mapstruct.version>1.6.3</org.mapstruct.version></properties>
<!--mapStruct依赖-->
<!-- mapstruct  -->
<dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId><version>${org.mapstruct.version}</version>
</dependency>
<!-- lombok dependency should not end up on classpath -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${org.projectlombok.version}</version><scope>provided</scope>
</dependency><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>${java.version}</source><target>${java.version}</target><annotationProcessorPaths><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${org.mapstruct.version}</version></path><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${org.projectlombok.version}</version></path><!-- additional annotation processor required as of Lombok 1.18.16 --><path><groupId>org.projectlombok</groupId><artifactId>lombok-mapstruct-binding</artifactId><version>0.2.0</version></path></annotationProcessorPaths></configuration></plugin></plugins></build>

建议安装插件 mapstruct support,按 ctrl + 鼠标左键 ,会跳转到参数对应的类

二、准备实体类

package space.goldchen.mapstruct.entity;import lombok.Data;
import lombok.Getter;
import lombok.Setter;/***  对象1* @author 2021* @create 2025-04-18 16:41*/
@Data
public class Pig {/*** id*/private Long id;/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 价格*/private Double price;
}
package space.goldchen.mapstruct.entity;import lombok.Data;/*** @author 2021* @create 2025-04-18 16:50*/
@Data
public class Person {private Long id;private String name;
}

三、准备DTO

package space.goldchen.mapstruct.dto;import lombok.Data;/*** @author 2021* @create 2025-04-18 16:44*/
@Data
public class PigDto {private Long id;private String name;private Integer age;
}
package space.goldchen.mapstruct.dto;import lombok.Data;/*** @author 2021* @create 2025-04-18 16:46*/
@Data
public class PersonDto {private Long idid;private String namename;private String fullName;
}

四、创建Mapper映射

1. 创建公用接口

package space.goldchen.mapstruct.mapper;/*** @author 2021* @create 2025-04-21 09:17*/import java.util.List;/*** 转换对象的属性名称一致时,可以省略Mappings的对应关系设置,使用泛型比较合适* mapstruct 公共类* <DTO,Entity>*/
public interface BaseMapper<D, E> {/*** entity转 DTO** @param entity* @return*/D toDto(E entity);/*** DTO 转 entity** @param dto* @return*/E toEntity(D dto);/*** entity集合 转 DTO集合** @param entityList* @return*/List<D> toDto(List<E> entityList);/*** DTO集合 转 entity集合** @param dtoList* @return*/List<E> toEntity(List<D> dtoList);
}

2. 创建PigDtoMapper映射关系

@Mapper(componentModel = “spring”,unmappedTargetPolicy = ReportingPolicy.IGNORE)

package space.goldchen.mapstruct.mapper;import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.ReportingPolicy;
import space.goldchen.mapstruct.dto.PigDto;
import space.goldchen.mapstruct.entity.Pig;/*** @author 2021* @create 2025-04-18 16:52*/
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface PigDtoMapper extends BaseMapper<PigDto,Pig> {/***  pig转为pigDto* @param pig* @return*/@Mappings({// 属性名称一致时,可以省略@Mapping(source = "id", target = "id"),@Mapping(source = "name", target = "name"),@Mapping(source = "age", target = "age")})public PigDto toDto(Pig pig);}

3. 创建PersonMapper映射关系

package space.goldchen.mapstruct.mapper;import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.ReportingPolicy;
import space.goldchen.mapstruct.dto.PersonDto;
import space.goldchen.mapstruct.entity.Person;/*** @author 2021* @create 2025-04-21 11:24*/
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface PersonMapper extends BaseMapper<PersonDto, Person>{@Mappings({// 属性名称一致时,可以省略@Mapping(source = "id", target = "idid"),@Mapping(source = "name", target = "namename"),@Mapping(source = "name", target = "fullName")})@OverridePersonDto toDto(Person entity);
}

五、调用测试

package space.goldchen.mapstruct;import ch.qos.logback.classic.Logger;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import space.goldchen.mapstruct.dto.PersonDto;
import space.goldchen.mapstruct.dto.PigDto;
import space.goldchen.mapstruct.entity.Person;
import space.goldchen.mapstruct.entity.Pig;
import space.goldchen.mapstruct.mapper.PersonMapper;
import space.goldchen.mapstruct.mapper.PigDtoMapper;@SpringBootTest
@Slf4j
class MapStructApplicationTests {@Resourceprivate PigDtoMapper pigDtoMapper;@Resourceprivate PersonMapper personMapper;@DisplayName("测试Pig转PigDto")@Testvoid testPigDtoMapper() {Pig pig = new Pig();pig.setId(1L);pig.setName("pig");pig.setAge(2);pig.setPrice(100.0);PigDto pigDto = pigDtoMapper.toDto(pig);log.info("pigDto:{}", pigDto);}@DisplayName("测试Person转PersonDto")@Testvoid testPersonToPersonDto () {Person person = new Person();person.setId(2L);person.setName("我是personName");PersonDto personDto = personMapper.toDto(person);log.info("personDto:{}", personDto);}}

七、更多细节

1. 设置默认值

@Mapping(source = "person.name",target = "personName",defaultValue = "默认值")

2. 使用表达式

// 目前java是唯一受支持的语言,达式必须以Java表达式的形式给出
// 注意: 这个属性不能与source()、defaultValue()、defaultExpression()、qualifiedBy()、qualifiedByName()或constant()一起使用。
@Mapping(target = "describe", source = "describe", defaultValue = "默认值")
@Mapping(target = "createTime",expression = "java(new java.util.Date())")
PersonDTO conver(Person person);
@Mapping(target = "created",expression = "java(cn.hutool.core.date.DateTime.now())")

3. 类中的子类转换

// uses 成员类,子类
@Mapper(componentModel = "spring", uses = {Log3InnerMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface Log3Mapper extends BaseMapper<Log3DTO, Log3> {}

4. Map的转换

// MapMapping  map集合使用
@Mapperpublic interface SimpleMapper {@MapMapping(valueDateFormat = "dd.MM.yyyy")Map<String, String> longDateMapToStringStringMap(Map<Long, Date> source);}

5. 逆转换

// 使用注释`@InheritInverseConfiguration`表示方法应继承相应反向方法的反向配置
@Mapping(target = "age",source = "age", numberFormat = "#0.00")
PersonDTO conver(Person person);@InheritInverseConfiguration
Person conver(PersonDTO dto);

文章转载自:

http://tqmiBSql.bpmtg.cn
http://KG2CS8Rt.bpmtg.cn
http://r22oRUqg.bpmtg.cn
http://1Vjz2Efv.bpmtg.cn
http://2u9vBIu0.bpmtg.cn
http://DkpfIJMm.bpmtg.cn
http://YdkP8USt.bpmtg.cn
http://JfzxeQps.bpmtg.cn
http://MNuNNdEt.bpmtg.cn
http://CoPR8VzH.bpmtg.cn
http://oyUUl1Xp.bpmtg.cn
http://RW2NGxm1.bpmtg.cn
http://Fpu5UvZK.bpmtg.cn
http://4yUjemI1.bpmtg.cn
http://SjcreCif.bpmtg.cn
http://1ya8IOad.bpmtg.cn
http://q2kQzDE2.bpmtg.cn
http://d1Hon4yE.bpmtg.cn
http://At1EJtPx.bpmtg.cn
http://8TX7RDkv.bpmtg.cn
http://HDw5t0St.bpmtg.cn
http://KPm8TtQ7.bpmtg.cn
http://7JNj02LI.bpmtg.cn
http://Ekqn1mPX.bpmtg.cn
http://anHCQ2pR.bpmtg.cn
http://gbiBrQYV.bpmtg.cn
http://hJgfXgTM.bpmtg.cn
http://AHHYGFeK.bpmtg.cn
http://LkHOwTQ9.bpmtg.cn
http://0SB9a4Pb.bpmtg.cn
http://www.dtcms.com/wzjs/690647.html

相关文章:

  • 陕西汽车网站建设吉林网络公司
  • 怎么查网站开发使用的语言网站付费推广方式
  • wordpress 即时站内搜索wordpress orm
  • 网站建设 - 碧诺网络包包网站建设策划书
  • wordpress网站统计免费商品展示页面设计模板
  • 建设部考试网站功能网站模板
  • 三明市网站建设网站基本配置
  • 网站建设淘宝江西九江刚刚发生的新闻
  • 昆明企业自助建站系统php网站开发介绍
  • 网站沙盒期网站建设 大公司小公司
  • 最专业微网站首选公司濮阳建站公司哪个好
  • 自建站网址智慧团建网页版手机登录
  • 免费自己生成网站深圳宝安区是富人区吗
  • 网站建设游戏ppt模板下载网站推荐
  • 月子会所网站建设方案网站服务器怎么选
  • 如何在空白服务器上搭建网站动漫设计专修学校
  • 做网站的公司需要哪些资质视频软件制作
  • 12316网站建设方案网站开发主流技术
  • 网站百度不收录盆景网站建设swot分析
  • 做网站的程序员wordpress同步简书
  • 韩国设计app网站有哪些成品网站货源1688免费推荐
  • 外贸开发网站开发网站优化费用怎么做会计分录
  • 长春网站建设5219做装修的网站怎么做好
  • 广东网站设计哪家好网络建设和维护
  • 做好的网站怎么链接武威做网站
  • 响应式网站建设的优势做网站先学什么
  • 汕头制作公司网站沈阳大型网站设计公司
  • 常州市城市建设集团有限公司网站电子商务网站的规划与建设论文
  • 做十个网站按文章标题相关wordpress
  • 广州3d网站开发花店网站建设论文