spring中的@mapper(componentModel = “spring”)

前几天刚入职,在看公司代码的时候,发现了一个注解:
@mapper(componentModel = “spring”)

@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;
        }
    }
}

十分高效~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐