⑴ java实体映射工具:MapStruct
MapStruct,版本为1.3.1.Final,是一款专门用于Java实体映射的强大工具。在项目中,我们经常需要进行Java Model之间的拷贝,或者严格区分数据对象(DO)、数据传输对象(DTO)和展示对象(VO),这时MapStruct可以自动映射实体属性,显着减少冗余代码,提升开发效率。
相较于Spring的BeanUtils和ModelMapper,MapStruct提供自定义映射规则的能力,而且通过注解实现,代码可读性更强。MapStruct在编译期生成映射代码,性能接近原生代码,避免了反射带来的性能损耗。
在使用MapStruct时,首先需要引入依赖,并考虑使用IDE插件提升开发体验。通过创建Java Model,定义映射接口,MapStruct能够自动生成映射实现类。例如,将PersonDO转换为PersonVO,只需定义映射规则的方法,无需额外的代码。测试代码验证映射效果,确保转换准确无误。
MapStruct支持Spring依赖注入,通过在@Mapper注解中配置componentModel为“spring”,实现类将自动注册为Bean。使用@Autowired注解即可轻松调用。
自定义映射规则时,MapStruct默认只映射同名属性。若需映射不同名属性,需在映射方法中明确指定。集合映射也十分简单,只需要定义一次映射方法即可,MapStruct自动处理集合元素。
对于不需要映射的字段,MapStruct提供忽略映射选项,避免不必要的转换。在多参数映射场景下,MapStruct同样支持,通过别名区分相同的属性名。
MapStruct自动处理简单的类型转换,如int转String、boolean转Boolean等。对于Date和String类型之间的转换,配置日期格式即可完成。复杂映射规则时,MapStruct允许自定义映射代码,通过工具类方法实现特定逻辑。
MapStruct支持默认值和常量,为属性提供默认赋值。同时,当入参Model为null时,MapStruct能够返回空Model而不是null,减少后续空指针判断的需要。
通过集成MapStruct,开发人员可以专注于业务逻辑,减少映射代码的编写,提高开发效率和代码可读性,同时保证高性能的转换效果。
⑵ 求教JAVA编译与运行的区别。
编译只是编译成了字节码,就是可执行的.class文件
运行时识别,主要是java的RTTI(运行时类型识别)机制和反射机制,而两者之间的区别在于:
”对RTTI来说,编译器在编译期打开和检查.class文件。(换句话说,我们可以用“普通”的方式调用一个对象的所有方法。),而对于反射机制来说,.class文件在编译期是不可获取的,所以是在运行期打开和检查.class文件。“
但是同样的,反射也需要加载这个类的Class对象,所以那个类的class对象对于jvm必须是可取的的,比如在本地机器上,或者通过网络取得,比如取得一串字节串。
具体的内容可以参考《Thinking in java》的”类型识别“那一章,讲的比较详细的