【无标题】

注解@Mapper(componentModel = "spring")-自动生成DTO-DO的模型映射

注解@Mapper(componentModel = "spring")-自动生成VO-DO的模型映射
场景: 插件可以自动生成实现类,实现DTO-DO各种模型之间的字段映射(不仅仅限制于DTO-DO)

  • 第一步: 引入pom文件
            <!--mapStruct依赖-->
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-jdk8</artifactId>
                <version>1.2.0.CR1</version>

            </dependency>
            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.2.0.CR1</version>   
                <scope>provided</scope>
            </dependency>
  • 第二步:

    @Mapper(componentModel = "spring")
    public interface TodoItemMapper {

        TodoItemVO toTodoItemVO(TodoItemDO todoItemDO);

        List<TTodoItem> toTodoItems(List<TodoItemDO> todoItemDOS);

        TodoItemDO toTodoItemDO(TodoItemVO todoItemVO);

        List<TodoItemVO> toTodoItemVOS(List<TodoItemDO> todoItemDOS);

    }

  • 其中可以发现这个类被定义成一个interfece,并且没有实现类。在其他地方自动注入TodoItemMapper时只会出现红线提示,但是编译会通过,这让我有点不解。问完mentor才知道,是@mapper(componentModel = “spring”)起了作用。

    该标签可以动态的完成DTO-DO之间的转换,这样程序员就可以免去写DO,VO,DTO各类之间转换关系的代码了。
    编译之后,会在target包中生成对应的实现类:


    @Component
    public class TodoItemMapperImpl implements TodoItemMapper {
        public TodoItemMapperImpl() {
        }

        public TodoItemVO toTodoItemVO(TodoItemDO todoItemDO) {
            if (todoItemDO == null) {
                return null;
            } else {
                TodoItemVO todoItemVO = new TodoItemVO();
                todoItemVO.setId(todoItemDO.getId());
                todoItemVO.setUserId(todoItemDO.getUserId());
                todoItemVO.setContent(todoItemDO.getContent());
                todoItemVO.setStatus(todoItemDO.getStatus());
                todoItemVO.setTopicId(todoItemDO.getTopicId());
                return todoItemVO;
            }
        }

        public List<TTodoItem> toTodoItems(List<TodoItemDO> todoItemDOS) {
            if (todoItemDOS == null) {
                return null;
            } else {
                List<TTodoItem> list = new ArrayList(todoItemDOS.size());
                Iterator var3 = todoItemDOS.iterator();

                while(var3.hasNext()) {
                    TodoItemDO todoItemDO = (TodoItemDO)var3.next();
                    list.add(this.todoItemDOToTTodoItem(todoItemDO));
                }

                return list;
            }
        }

        public TodoItemDO toTodoItemDO(TodoItemVO todoItemVO) {
            if (todoItemVO == null) {
                return null;
            } else {
                TodoItemDO todoItemDO = new TodoItemDO();
                todoItemDO.setId(todoItemVO.getId());
                todoItemDO.setUserId(todoItemVO.getUserId());
                todoItemDO.setContent(todoItemVO.getContent());
                todoItemDO.setStatus(todoItemVO.getStatus());
                todoItemDO.setTopicId(todoItemVO.getTopicId());
                return todoItemDO;
            }
        }

        public List<TodoItemVO> toTodoItemVOS(List<TodoItemDO> todoItemDOS) {
            if (todoItemDOS == null) {
                return null;
            } else {
                List<TodoItemVO> list = new ArrayList(todoItemDOS.size());
                Iterator var3 = todoItemDOS.iterator();

                while(var3.hasNext()) {
                    TodoItemDO todoItemDO = (TodoItemDO)var3.next();
                    list.add(this.toTodoItemVO(todoItemDO));
                }

                return list;
            }
        }

        protected TTodoItem todoItemDOToTTodoItem(TodoItemDO todoItemDO) {
            if (todoItemDO == null) {
                return null;
            } else {
                TTodoItem tTodoItem = new TTodoItem();
                tTodoItem.setId(todoItemDO.getId());
                tTodoItem.setUserId(todoItemDO.getUserId());
                tTodoItem.setContent(todoItemDO.getContent());
                tTodoItem.setStatus(todoItemDO.getStatus());
                tTodoItem.setCreatedTime(todoItemDO.getCreatedTime());
                tTodoItem.setUpdatedTime(todoItemDO.getUpdatedTime());
                tTodoItem.setTopicId(todoItemDO.getTopicId());
                return tTodoItem;
            }
        }
    }

@Mapper(componentModel = "spring")
public interface RoleConvert {

    RoleDO convert(RoleCreateDTO roleCreateDTO);
}


    使用:
    @Autowired
    private RoleConvert roleConvert;

    // 转化
    RoleDO roleDO = roleConvert.convert(roleCreateDTO);
  • 第三步: 看编译后自动生成的实现类

编译后自动生成了RoleConvert 的实现类 RoleConvertImpl.class

image.png

  • 第四步: 高级用法,指定映射字段
@Mapper(componentModel = "spring")
public interface ProductConverter {

    @Mappings({
            @Mapping(source = "id",target = "productId"),
            @Mapping(source = "title",target = "productName"),
            @Mapping(source = "price",target = "salePrice"),
            @Mapping(source = "sellPoint",target = "subTitle"),
            @Mapping(source = "image",target = "picUrl")
    })
    ProductDto item2Dto(ItemDocument item);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值