MapStruct使用教程

BeanUtils.copyProperties ()
   只能转换类中字段名字一样且类型一样的字段。
   采用反射技术,重复调用时效率是比较低下。

原文链接
官网链接

1、依赖包POM.xml

<!--mapStruct依赖 高性能对象映射-->
    <!--mapstruct核心-->
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${mapstruct.version}</version>
	</dependency>
    <!--mapstruct编译-->
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>${mapstruct.version}</version>
    </dependency>
    
<!--Lombok依赖:(版本最好在1.16.16以上,否则会出现问题)通常是和lombok一起使用-->
    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
        <version>${lombok.version}</version>
        // 版本号 1.18.12
    </dependency>

2、定义转换器

@Mapper(componentModel = "spring")
public interface BeanConverter {
    FavoriteInfoBo favoriteInfoPoToBo(FavoriteInfoPo po);
    
    UserProfileInfoBo userProfileInfoPoToBo(UserProfileInfoPo userProfileInfoPo);
}

自动生成转换类

package com.goodwe.sems.user.converter;

import com.goodwe.sems.user.model.bo.FavoriteInfoBo;
import com.goodwe.sems.user.repository.po.AppPageConfigPo;
import com.goodwe.sems.user.repository.po.AppPageTemplatePo;
import com.goodwe.sems.user.repository.po.FavoriteInfoPo;
import com.goodwe.sems.user.repository.po.UserProfileInfoPo;
import com.goodwe.sems.user.service.bo.AppPageConfigBo;
import com.goodwe.sems.user.service.bo.AppPageTemplateBo;
import com.goodwe.sems.user.service.bo.UserProfileInfoBo;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.processing.Generated;
import org.springframework.stereotype.Component;

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2023-12-25T16:53:44+0800",
    comments = "version: 1.3.1.Final, compiler: javac, environment: Java 19.0.2 (Oracle Corporation)"
)
@Component
public class BeanConverterImpl implements BeanConverter {
    
    @Override
    public FavoriteInfoBo favoriteInfoPoToBo(FavoriteInfoPo po) {
        if ( po == null ) {
            return null;
        }
        FavoriteInfoBo favoriteInfoBo = new FavoriteInfoBo();
        favoriteInfoBo.setId( po.getId() );
        favoriteInfoBo.setBizType( po.getBizType() );
        favoriteInfoBo.setBizId( po.getBizId() );
        favoriteInfoBo.setUserId( po.getUserId() );
        favoriteInfoBo.setCreator( po.getCreator() );
        favoriteInfoBo.setUpdater( po.getUpdater() );
        favoriteInfoBo.setCreateTime( po.getCreateTime() );
        favoriteInfoBo.setUpdateTime( po.getUpdateTime() );
        return favoriteInfoBo;
    }
    
    @Override
    public UserProfileInfoBo userProfileInfoPoToBo(UserProfileInfoPo userProfileInfoPo) {
        if ( userProfileInfoPo == null ) {
            return null;
        }
        UserProfileInfoBo userProfileInfoBo = new UserProfileInfoBo();
        userProfileInfoBo.setId( userProfileInfoPo.getId() );
        userProfileInfoBo.setUserId( userProfileInfoPo.getUserId() );
        if ( userProfileInfoPo.getTimeSpan() != null ) {
            userProfileInfoBo.setTimeSpan( new BigDecimal( userProfileInfoPo.getTimeSpan() ) );
        }
        `````
        userProfileInfoBo.setUpdater( userProfileInfoPo.getUpdater() );
        if ( userProfileInfoPo.getUpdaterId() != null ) {
            userProfileInfoBo.setUpdaterId( Long.parseLong( userProfileInfoPo.getUpdaterId() ) );
        }
        userProfileInfoBo.setUpdateTime( userProfileInfoPo.getUpdateTime() );
    
        return userProfileInfoBo;
    }
}

3、Service实现层

@Slf4j
@Service
@RequiredArgsConstructor
public class UserProfileInfoServiceImpl implements UserProfileInfoService {

    private final UserProfileInfoMapper userProfileInfoMapper;


    @Override
    public UserProfileInfoBo queryByUserId(Long userId) {
        UserProfileInfoPo userProfileInfoPo = userProfileInfoMapper
                .selectOne(Wrappers.lambdaQuery(UserProfileInfoPo.class).eq(UserProfileInfoPo::getUserId, userId));
        // BeanConverter.INSTANCE.userProfileInfoPoToBo()
        return BeanConverter.INSTANCE.userProfileInfoPoToBo(userProfileInfoPo);
    }
}

属性名称注解映射

// mapper : 创建映射器
@Mapper
public interface PersonMapper {

    PersonMapper INSTANCT = Mappers.getMapper(PersonMapper.class);
	
	@Mapping(target = "name", source = "personName")
	@Mapping(target = "id", ignore = true) // 忽略id,不进行映射
    PersonDTO conver(Person person);
}
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值