如何使用mapstruct框架生成java bean映射类

在日常的开发中,为了避免污染直接映射数据库的java bean类,通过我们另写一个vo类并设置相关需要展示的属性。为了把值赋值到vo类,平常使用的方法有自己写get()与set()方法一个一个赋值,也可以使用封装的BeanUtils.copy()方法。
配置好 mapstruct 框架也可以帮助再你启动时生成对应的get()与set()方法。

1.pom.xml配置文件

<properties>
<java.version>1.8</java.version>
<mapstruct.version>1.4.1.Final</mapstruct.version>
<maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
</properties>

<dependencies>
   <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${mapstruct.version}</version>
   </dependency>
</dependencies>

 <build>
     <plugins>
        <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${mapstruct.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
      </plugin>
   <plugins>
</build>

2.对应的po类与vo类

class UserPo{
    private int id;
    private String username;
    private Date birthday;
    private String headImgUrl;
//get()、set()........
}
class UserVo{
    private int id;
    private String name;
    private String birthday;
    private String headImgUrl;
    private int age;
//get()、set()........
}

编写对应的接口

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface UserConverter {

    UserConverter INSTANCE = Mappers.getMapper(UserConverter .class);

    @Mappings({
            @Mapping(source = "po.id", target = "id"),
            @Mapping(source = "po.username", target = "name"),
            @Mapping(source = "po.birthday", target = "birthday",qualifiedByName="changeDateToString"),
            @Mapping(source = "po.headImgUrl", target = "headImgUrl",qualifiedByName="addHeadUrl"),
            @Mapping(source = "age", target = "age")
    })
    UserVo poToVo(UserPo po,int age,@Context String headUrl)
}

@Named("changeDateToString")
default String changeDateToString(Date birthday){
   SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH点");
   return formatter.format(date);
}

@Named("addHeadUrl")
default String addHeadUrl(String headImgUrl,@Context String headUrl){
   return headUrl+headImgUrl;
}

如果vo类与po类属性类型与名称完全相同,且没有其他参数,可以直接这么写

UserVo poToVo(UserPo po)

//List也可以直接复制
Lsit<UserVo> listPoToListVo(List<UserPo> pos)

之后在你启动项目之后会在对应的 target文件夹下生成相应的继承类
在这里插入图片描述

如何使用:

UserVo vo = UserConverter.INSTANCE.poToVo(.....);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值