MapStruct助力pojo之间的花式转换

介绍

官网:https://mapstruct.org/

一个用于在Java Bean之间转换的代码生成工具。它通过注解和代码生成技术,简化了对象之间的映射,使开发者能够更方便地进行对象之间的转换,而不需要手动编写繁琐的映射代码。

使用

引入MapStruct依赖

在Maven项目中,可以通过以下方式引入MapStruct的依赖:

<!--MapStruct 依赖-->
<dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>1.4.1.Final</version>
    </dependency>
    <!--MapStruct 注解处理器-->
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.4.1.Final</version>
    </dependency>

创建实例对象

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Source {
    private String sourceId;
    private String sourceName;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Target {
    private String targetId;
    private String targetName;
}

定义MapStruct映射接口

@Mapper
public interface MapStructMapper {
    MapStructMapper INSTANCE = Mappers.getMapper(MapStructMapper.class);

    @Mappings({
            @Mapping(source = "sourceId", target = "targetId"),
            @Mapping(source = "sourceName", target = "targetName")
    })
    Target sourceToTarget(Source source);

}

映射测试

在代码中使用MapStructMapper.INSTANCE.sourceToTarget(source)方法将Source对象转换为Target对象。

public class Main {
    public static void main(String[] args) {
        Source source = new Source("666", "奇遇少年");
        Target target = MapStructMapper.INSTANCE.sourceToTarget(source);
        System.out.println(target.getTargetId());   //666
        System.out.println(target.getTargetName()); //奇遇少年

    }
}

ignore忽悠字段

@Mapper
public interface MapStructMapper {
    MapStructMapper INSTANCE = Mappers.getMapper(MapStructMapper.class);
    //在映射规则中使用ignore=true忽略某个字段
    @Mappings({
            @Mapping(source = "sourceIgnore", target = "targetIgnore", ignore = true)
    })
    Target sourceToTarget(Source source);

}

日期格式转换

//定义MapStruct映射接口
@Mapper
public interface MapStructMapper {
    MapStructMapper INSTANCE = Mappers.getMapper(MapStructMapper.class);
    @Mappings({
            @Mapping(source = "sourceDate", target = "targetDate",dateFormat = "yyyy-MM-dd")    
    })
    Target sourceToTarget(Source source);
}

@BeanMapping(ignoreByDefault=true)

配置忽略mapstruct的默认映射行为,只映射那些配置了@Mapping的属性

//定义MapStruct映射接口
@Mapper
public interface MapStructMapper {
    MapStructMapper INSTANCE = Mappers.getMapper(MapStructMapper.class);
    @BeanMapping(ignoreByDefault=true)
    @Mapping(source = "sourceName", target = "targetName")
    Target sourceToTarget(Source source);
}

结语:

MapStruct的优点非常明显,它可以帮助开发者减少重复、繁琐的对象属性拷贝代码,使得代码更为简洁和易于维护。同时,由于使用了注解处理器,所有的映射逻辑都在编译时就会生成,这意味着性能上不会有反射调用带来的开销,映射执行速度快。
可能出现的错误:http://t.csdnimg.cn/kBdxA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇遇少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值