当前位置: 首页 > 工具软件 > ModelMapper > 使用案例 >

modelMapper.map的一个使用例子

严曜文
2023-12-01

先上modelMapper.map的中文翻译:(百度自动翻译)
应用通常由相似但不同的对象模型组成,其中两个模型中的数据可能相似,但模型的结构和关注点不同。对象映射使将一个模型转换为另一个模型变得容易,从而允许单独的模型保持隔离。

ModelMapper 的目标是通过自动确定一个对象模型如何根据惯例以与人类相同的方式映射到另一个对象模型来简化对象映射,同时提供一个简单、重构安全的 API 来处理特定的使用案例。

ModelMapper 分析对象模型,以便智能地确定应如何映射数据。无需手动映射。ModelMapper 为您完成大部分工作,自动投影和平整复杂的模型。
您可以使用方法引用来匹配源获取器和目标设置器来定义属性映射。

typeMap.addMapping(Source::getFirstName, Destination::setName);

此示例将目标类型的方法映射到源类型的方法层次结构,从而允许源和目标方法之间发生深度映射:

setAgegetCustomer().getAge()

typeMap.addMapping(src -> src.getCustomer().getAge(), PersonDTO::setAge);

此示例将目的地类型的方法层次结构映射到源类型的属性层次

结构:getCustomer().setName()person.getFirstName()

typeMap.addMapping(src -> src.getPerson().getFirstName(), (dest, v) -> dest.getCustomer().setName(v));

官网其余部分就不复制了,自动翻译的也很烂。。

一个使用的例子:

public class PageInfoHelper {

    public static <T, J> PageInfo<J> copyMap(PageInfo<T> source, Function<? super T, ? extends J> mapper) {
        PageInfo<J> newPage = new PageInfo<>();
        newPage.setPageNum(source.getPageNum());
        newPage.setPageSize(source.getPageSize());
        newPage.setSize(source.getSize());
        newPage.setStartRow(source.getStartRow());
        newPage.setEndRow(source.getEndRow());
        newPage.setTotal(source.getTotal());
        newPage.setPages(source.getPages());
        newPage.setList(source.getList().stream().map(mapper).collect(Collectors.toList()));
        newPage.setPrePage(source.getPrePage());
        newPage.setNextPage(source.getNextPage());
        newPage.setIsFirstPage(source.isIsFirstPage());
        newPage.setIsLastPage(source.isIsLastPage());
        newPage.setHasPreviousPage(source.isHasPreviousPage());
        newPage.setHasNextPage(source.isHasNextPage());
        newPage.setNavigatePages(source.getNavigatePages());
        newPage.setNavigatepageNums(source.getNavigatepageNums());
        newPage.setNavigateFirstPage(source.getNavigateFirstPage());
        newPage.setNavigateLastPage(source.getNavigateLastPage());
        return newPage;
    }
}

    @RequestMapping(value = "/event/page/list", method = RequestMethod.POST)
    public RestResponse<PageInfo<UserEventLogVM>> eventPageList(@RequestBody UserEventPageRequestVM model) {
        PageInfo<UserEventLog> pageInfo = userEventLogService.page(model);
        PageInfo<UserEventLogVM> page = PageInfoHelper.copyMap(pageInfo, d -> {
            UserEventLogVM vm = modelMapper.map(d, UserEventLogVM.class);
            vm.setCreateTime(DateTimeUtil.dateFormat(d.getCreateTime()));
            return vm;
        });
        return RestResponse.ok(page);
    }

其中用到的地方是:

PageInfoHelper.copyMap(pageInfo, d -> {
            UserEventLogVM vm = modelMapper.map(d, UserEventLogVM.class);
            vm.setCreateTime(DateTimeUtil.dateFormat(d.getCreateTime()));
            return vm;
        });
 类似资料: