在开发过程中经常会有一个需求,就是类型转换 (把一个类转成另一个类)modelmapper就是一个提高生产力的工具 入门 内置匹配器 自定义匹配器 源码映射解析 入门 方式1 (默认配置) 导入maven -- http://modelmapper.org/getting-started/--> <dependency> <groupId>org.modelmapper</groupId> modelMapper = new ModelMapper(); AppleDTO appleDto = modelMapper.map(apple, AppleDTO.class); image.png public void test2() { ModelMapper modelMapper = new ModelMapper(); modelMapper.getConfiguration modelMapper = new ModelMapper(); modelMapper.addMappings(customField()) ; List<AppleDTO
它的使用非常简单,首先添加maven依赖 <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper</artifactId modelMapper = new ModelMapper(); PostDO postDO = PostDO.builder().id(3L).likeNum(0).build(); :380) at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:79) at org.modelmapper.ModelMapper.mapInternal (ModelMapper.java:554) at org.modelmapper.ModelMapper.map(ModelMapper.java:387) at Application.main ModelMapper是将like字段映射到likeNum了。那么ModelMapper究竟是怎样进行映射的呢,我们一起来看一下ModelMapper的源码。
ModelMapper是一个 Maven 库,用于将实体对象转换为 DTO,反之亦然。 <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper</artifactId> <version UserService import com.geeksforgeeks.ModelMapper.data.User; import com.geeksforgeeks.ModelMapper.dto.UserDto ; import com.geeksforgeeks.ModelMapper.dto.UserDto; import com.geeksforgeeks.ModelMapper.repository.UserRepository ; import com.geeksforgeeks.ModelMapper.dto.UserDto; import com.geeksforgeeks.ModelMapper.service.UserServiceImpl
ModelMapper 定义: ModelMapper是一个对象映射库,它提供了一个简单的API来映射对象到对象(包括标准Java对象、POJOs等)。 实现原理: 约定优于配置:ModelMapper采用“约定优于配置”的原则,即它试图通过智能匹配源对象和目标对象的属性名来自动建立映射关系。 类型转换:ModelMapper支持多种类型转换,并允许开发者注册自定义的类型转换器。 性能优化:ModelMapper在内部使用缓存和其他优化技术来提高映射性能。 import org.modelmapper.ModelMapper; public class Main { public static void main(String[] args) { ModelMapper modelMapper = new ModelMapper(); Person person = new Person();
ModelMapper 首先,让我们看看用来执行实体-DTO转换的主要类库——ModelMapper。 我们需要在pom.xml中添加这个依赖: <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper< 然后,我们将在Spring配置中定义ModelMapper bean: @Bean public ModelMapper modelMapper() { return new ModelMapper 库的帮助下,转换逻辑是快速且简单的——我们使用了modelMapper的map API,并且在不编写任何转换逻辑的情况下完成了数据转换。 modelMapper = new ModelMapper(); @Test public void whenConvertPostEntityToPostDto_thenCorrect
ModelMapper ModelMapper 是一个旨在简化对象映射的框架,它根据约定确定对象之间的映射方式。它提供了类型安全的和重构安全的 API。 更多关于 ModelMapper 的内容可以在官方文档中找到:http://modelmapper.org/ 。 要使用 ModelMapper 框架,我们需要添加这样的依赖到我们的项目: <dependency> <groupId>org.modelmapper</groupId> <artifactId >modelmapper</artifactId> <version>1.1.0</version> </dependency> 2.5. modelMapper; public ModelMapperConverter() { modelMapper = new ModelMapper(); }
ModelMapper 定义: ModelMapper是一个对象映射库,它提供了一个简单的API来映射对象到对象(包括标准Java对象、POJOs等)。 实现原理: 约定优于配置:ModelMapper采用“约定优于配置”的原则,即它试图通过智能匹配源对象和目标对象的属性名来自动建立映射关系。 类型转换:ModelMapper支持多种类型转换,并允许开发者注册自定义的类型转换器。 性能优化:ModelMapper在内部使用缓存和其他优化技术来提高映射性能。 import org.modelmapper.ModelMapper; public class Main { public static void main(String[] args) { ModelMapper modelMapper = new ModelMapper(); Person person = new Person();
ModelMapper 是一个强大而灵活的 Java 库,用于对象映射。 ModelMapper 通过智能匹配策略,减少了手动映射的需要,从而提高了开发效率。 使用示例以下是一个简单的使用 ModelMapper 进行对象拷贝的示例:首先,添加 ModelMapper 的依赖到项目中(以 Maven 为例):xml复制代码<dependency> <groupId 将 User 的实例属性拷贝到 UserDTO 的实例中:java复制代码import org.modelmapper.ModelMapper;public class Main { public static void main(String[] args) { ModelMapper modelMapper = new ModelMapper(); User user
实际应用中的技巧 使用一些对象映射工具(如ModelMapper、MapStruct等)可以简化VO类的创建过程,减少手动编写转换代码的工作量。 例如: // 使用ModelMapper进行对象映射 ModelMapper modelMapper = new ModelMapper(); GoodsVO goodsVO = modelMapper.map
添加 modelMapper 我们在 pom.xml 中,添加下面的依赖: <! -- https://mvnrepository.com/artifact/org.modelmapper/modelmapper --> <dependency> <groupId>org.modelmapper ,在入口文件 TodoServiceApplication 中添加下面的内容: @Bean public ModelMapper modelMapper() { ModelMapper modelMapper modelMapper() { ModelMapper modelMapper = new ModelMapper(); modelMapper.getConfiguration() modelMapper; @Override public DemoDto addDemoItem(DemoDto demoDto) { Demo demo = modelMapper.map
modelMapper <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper</artifactId String[] args) { SpringApplication.run(DemoApplication.class, args); } @Bean public ModelMapper modelMapper() { return new ModelMapper(); } } po 与 dto 转化 还是上面那个 user 实体,但是返回的数据中不需要将 user 就可以使用 modelMapper 来转化(前提已经注入) private final ModelMapper modelMapper; @Override public UserDto userRepository.findById(id).orElseThrow(() -> new BadRequestException("用户不存在")); UserDto userDto = modelMapper.map
依赖: <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper</artifactId // 支持自定义映射,支持List map start = System.currentTimeMillis(); ModelMapper modelMapper = new ModelMapper(); PersonVO p4 = modelMapper.map(p, PersonVO.class); // modelMapper modelMapper = new ModelMapper(); List<EvenVO>list = modelMapper.map(eventList, new TypeToken<List<EventVO 如果追求速度,果断选择 cdlib, 并将初始化过程缓存起来,方便复用 如果追求实用方便,能深拷贝,自定义拷贝,拷贝集合,推荐选择ModelMapper.
他实际上的原理就是为我们自动书写实现类:ModelMapperimport org.modelmapper.ModelMapper;public class ModelMapperExample { ("answer"); po.setCreateTime(new Date()); po.setUpdateTime(new Date()); // 创建 ModelMapper 对象 ModelMapper modelMapper = new ModelMapper(); // PO转换为VO UserInfoVo vo = modelMapper.map (dto, UPanUser.class); System.out.println("DTO转换为PO:" + poFromDto.getUsername()); }}使用 ModelMapper 可以更加灵活地定义属性映射规则,只需创建一个 ModelMapper 对象,然后调用其 map 方法即可实现对象之间的属性拷贝。
小知识点 Map有getOrDefault("1","0");取不到取默认值 两个不同对象,属性相同进行赋值转换,使用modelMapper <dependency> <groupId>org.modelmapper </groupId> <artifactId>modelmapper</artifactId> <version>1.1.0</version> </dependency> controller
-- https://mvnrepository.com/artifact/org.modelmapper/modelmapper --> <dependency> <groupId>org.modelmapper </groupId> <artifactId>modelmapper</artifactId> <version>3.2.0</version> </dependency> <! SpringBootApplication public class WechatServiceApplication { // 使用 model mapper @Bean public ModelMapper modelMapper() { ModelMapper modelMapper = new ModelMapper(); modelMapper.getConfiguration() userRepository.findOneByOpenId(openId); if(userExist.isEmpty()) { // 转换为 entity User user = modelMapper.map
ModelMapper 11. JMapper 12. MapStruct 四、总结 五、系列推荐 一、前言 为哈么,你的代码也就仅仅是能用而已? 种,包括:普通的getset、json2Json、Apache属性拷贝、Spring属性拷贝、bean-mapping、bean-mapping-asm、BeanCopier、Orika、Dozer、ModelMapper ModelMapper @Component public class ModelMapperAssembler implements IAssembler<UserVO, UserDTO> { private static ModelMapper modelMapper = new ModelMapper(); static { modelMapper.addMappings (var, UserDTO.class); } } 官网:http://modelmapper.org 推荐:★★★☆☆ 性能:★★★☆☆ 手段:基于ASM字节码实现 点评:转换对象数量较少时性能不错
栈长简单翻译下: Dozer 项目当前不再维护了,并且将来很大可能被弃用,然后新用户不建议使用了,老用户也推荐大家迁移到 MapStruct 和 ModelMapper 等类库上面去。 ---- 如果大家项目中有用到 Dozer 的,也建议考虑迁移到别的 Bean 映射工具,比如:MapStruct、Orika、ModelMapper、JMapper 等等,至于它们的性能如何,栈长找到了一篇国外的评测报告 Framework Name p0.90 p0.999 p1.0 JMapper 10-3 0.008 64 MapStruct 10-3 0.010 68 Orika 0.006 0.278 32 ModelMapper 我们再来看下 Google 搜索趋势: 可以看到,在全球过去的一年时间,MapStruct 独占鳌头,然后就是 ModelMapper 紧随其后! 上图调整到了中国,数据很少,显然中国地区使用 Google 搜索的相对不多,但也能看到 MapStruct 确实是使用最多的,另外就是 Dozer、ModelMapper 了。
private UserService userService; @Autowired private UserMapper userMapper; @Autowired private ModelMapper modelMapper; @PostMapping(value = "/list") ResponseData<List<UserOutputDto>> query(@RequestParam page.getRecords(); List<UserOutputDto> userOutDtoList = records.stream() .map(user -> modelMapper.map <version>1.34.0</version> </dependency> <dependency> <groupId>org.modelmapper </groupId> <artifactId>modelmapper</artifactId> <version>2.4.4</version>
用 MapStruct 替换那些笨重的 ModelMapper/Lombok DTO 组合。 结果怎样?一切都变好了! private String name; private int age; // 通过 Lombok 实现的 setters 和 getters } 然后是: UserDTO dto = modelMapper.map • 用 MapStruct 替换 ModelMapper 你将会编写更少的注解,调试更少的 Bug,并最终真正地 掌控你自己的代码,然后睡个好觉,获得更多的头发!
UserRepository userRepository; private final ProjectRepository projectRepository; private final ModelMapper modelMapper; @Override public TaskDTO createTask(TaskCreateRequest request, Long creatorId / 保存任务 Task savedTask = taskRepository.save(task); // 转换为DTO并返回 return modelMapper.map 特别注意:使用@Transactional保证事务一致性采用ModelMapper进行实体与DTO之间的转换实现了基本的异常处理(资源未找到)方法上添加@Transactional(readOnly = .orElseThrow(() -> new ResourceNotFoundException("Task not found")); TaskDTO dto = modelMapper.map