当前位置: 首页 > news >正文

免费企业网站源码下载网站 上一篇 下一篇

免费企业网站源码下载,网站 上一篇 下一篇,湖南网站设计费用,天猫商城入口一、引入 在没有遇见mapstruct的时候#xff0c;实现各个实体之间的转换#xff0c;都是手动转换实现的#xff0c;属性少一带你还好#xff0c;当属性一多#xff0c;代码就会变得很冗余#xff0c;没必要的非逻辑的代码就会加多。。。。 比如#xff1a; public cl…一、引入 在没有遇见mapstruct的时候实现各个实体之间的转换都是手动转换实现的属性少一带你还好当属性一多代码就会变得很冗余没必要的非逻辑的代码就会加多。。。。 比如 public class UserDTO {private String username;private String email;private boolean isActive;// Getters and setters// Constructor// Other methods as needed }// BO: UserBO.java public class UserBO {private String username;private String email;private boolean isActive;// Getters and setters// Constructor// Business methods as needed } 手动实现类型转换 public class UserConverter {public static UserBO convertToBO(UserDTO userDTO) {UserBO userBO new UserBO();userBO.setUsername(userDTO.getUsername());userBO.setEmail(userDTO.getEmail());userBO.setActive(userDTO.isActive());return userBO;}public static UserDTO convertToDTO(UserBO userBO) {UserDTO userDTO new UserDTO();userDTO.setUsername(userBO.getUsername());userDTO.setEmail(userBO.getEmail());userDTO.setActive(userBO.isActive());return userDTO;} } 这种方式就很费时费力一个突然的契机我在学习DDD领域驱动设计架构的时候发现up使用的mapstruct做的实体之间的转换后面也了解了一下发现这个工具还是很优秀的。 二、Mapstruct MapStruct 是一个代码生成器用于创建实现Java Bean之间转换的扩展映射器它基于约定优于配置的方法极大地简化了 Java bean 之间映射的实现我们只需要创建接口MapStruct就会在编译时自动创建一个具体的实现进行对象的转换 2.1、Mapstruct和BeanUtil的比较  Mapstruct的性能远远高于BeanUtils这应该是大佬使用Mapstruct的主要原因下面是我的测试结果可以看出随着属性个数的增加BeanUtils的耗时也在增加并且BeanUtils的耗时跟属性个数成正比而Mapstruct的耗时却一直是1秒所以从对比数据可以看出Mapstruct是非常优秀的其性能远远超过BeanUtil BeanUtils 只能同属性映射或者在属性相同的情况下允许被映射的对象属性少但当遇到被映射的属性数据类型被修改或者被映射的字段名被修改则会导致映射失败。 2.2、优势为什么选择Mapstruct 2.3、快速入门 2.3.1、引入依赖 dependencygroupIdorg.mapstruct/groupIdartifactIdmapstruct/artifactIdversion1.4.2.Final/version/dependencydependencygroupIdorg.mapstruct/groupIdartifactIdmapstruct-processor/artifactIdversion1.4.2.Final/version/dependency 2.3.1、定义DTO和BO  /*** SubjectCategoryDTO*/ Data public class SubjectCategoryDTO implements Serializable {private static final long serialVersionUID -36288445272926615L;private Long id;private String categoryName;private Integer categoryType;private String imageUrl;private Long parentId;private Integer count;} Data public class SubjectCategoryBO implements Serializable {private static final long serialVersionUID -36288445272926615L;private Long id;private String categoryName;private Integer categoryType;private String imageUrl;private Long parentId;private Integer count; } 2.4.1、定义Convert接口 Mapper public interface SubjectCategoryDTOConvert {SubjectCategoryDTOConvert INSTANCE Mappers.getMapper(SubjectCategoryDTOConvert.class);//将DTO转换为BOSubjectCategoryBO convertDTOToBO(SubjectCategoryDTO subjectCategoryDTO);//将ListBO转换为ListDTOListSubjectCategoryDTO convertBoListToDTOList(ListSubjectCategoryBO subjectCategoryBOList);//将BO转换为DTOSubjectCategoryDTO convertBoToCategoryDTO(SubjectCategoryBO subjectCategoryBO); } 2.4、性能好的原因 Java程序执行的过程是由编译器先把java文件编译成class字节码文件然后由JVM去解释执行class文件。Mapstruct正是在java文件到class这一步帮我们实现了转换方法即做了预处理提前编译好文件如果用过lombok的同学一定能理解其好处通过查看class文件可以看出SubjectCategoryDTOConvert 被打上org.mapstruct.Mapper注解后编译器自动会帮我们生成一个实现类SubjectCategoryDTOConvertImpl并实现了convertDTOToBO、convertBoListToDTOList、convertBoToCategoryDTO这些方法 从生成的代码可以看出转化过程非常简单只使用了UserPo的get方法和UserEntity的set方法没有复杂的逻辑处理清晰明了所以性能很高 相对于BeanUtils来说 BeanUtils转换的原理是使用的反射反射的效率相对来说是低的因为jvm优化在这种场景下有可能无效所以在对性能要求很高或者经常被调用的程序中尽量不要使用。我们平时在研发过程中也会遵守这个原则非必要不反射。 从下面的BeanUtils的copyProperties方法代码中可以看出转化逻辑非常复杂有很多的遍历去获取属性获取方法设置方法可访问然后执行所以执行效率相对Mapstruct来说是非常低的。回头看Mapstruct自动生成的实现类简洁、高效 BeanUtils的copyProperties方法的源码 private static void copyProperties(Object source, Object target, Nullable Class? editable, Nullable String... ignoreProperties) throws BeansException {Assert.notNull(source, Source must not be null);Assert.notNull(target, Target must not be null);Class? actualEditable target.getClass();if (editable ! null) {if (!editable.isInstance(target)) {throw new IllegalArgumentException(Target class [ target.getClass().getName() ] not assignable to Editable class [ editable.getName() ]);}actualEditable editable;}PropertyDescriptor[] targetPds getPropertyDescriptors(actualEditable);ListString ignoreList ignoreProperties ! null ? Arrays.asList(ignoreProperties) : null;PropertyDescriptor[] var7 targetPds;int var8 targetPds.length;for(int var9 0; var9 var8; var9) {PropertyDescriptor targetPd var7[var9];Method writeMethod targetPd.getWriteMethod();if (writeMethod ! null (ignoreList null || !ignoreList.contains(targetPd.getName()))) {PropertyDescriptor sourcePd getPropertyDescriptor(source.getClass(), targetPd.getName());if (sourcePd ! null) {Method readMethod sourcePd.getReadMethod();if (readMethod ! null) {ResolvableType sourceResolvableType ResolvableType.forMethodReturnType(readMethod);ResolvableType targetResolvableType ResolvableType.forMethodParameter(writeMethod, 0);if (targetResolvableType.isAssignableFrom(sourceResolvableType)) {try {if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {readMethod.setAccessible(true);}Object value readMethod.invoke(source);if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) {writeMethod.setAccessible(true);}writeMethod.invoke(target, value);} catch (Throwable var17) {throw new FatalBeanException(Could not copy property targetPd.getName() from source to target, var17);}}}}}}} 所以综上所述 Mapstruct的高性能是毋庸置疑的这也是我选择使用他的根本原因。在使用方式上和BeanUtils对比Mapstruct需要创建mapper接口和自定义转换工具类其实上手成本并不高但是我们换取了高性能这是非常值得的所以强烈推荐大家使用Mapstruct是时候和BeanUtils说再见了 对于 Mapstruct更深入的学习大家可以自己自行搜索学习~
http://www.zqtcl.cn/news/891763/

相关文章:

  • 公司建网站要多少钱wordpress轮播框
  • 怎么看一个网站什么语言做的全网最新首码项目
  • 深圳网站建设ue网站空间和流量
  • 网站前端设计要做什么游仙建设局官方网站
  • 大型门户网站建设哪家好进一步加大网站集约化建设力度
  • 网站里面那些工作是做晚上兼职的钱包网站建设策划
  • 网站开发实现的环境自豪地采用wordpress 怎么去掉
  • ic商城网站建设网站备案关闭影响排名
  • qq官方网站进入wordpress调用文章某个分类
  • 南充网站建设设计略奥企业网站管理系统怎么修改密码
  • 网站建设里的知识360云主机可以建设网站吗
  • 创建网站代码上海网络公司查询
  • 电子商务网站建设与管理实训报告百度权重划分等级
  • 网站建设响应式是什么医院网站建设方案策划书
  • 开鲁网站seo不用下载男女做羞羞事动画网站免费
  • 做网站客户需求新乡专业做网站多少钱
  • 邢台建设银行官方网站二维码生成器app下载
  • 自己怎么做网站游戏做网站就是做app
  • 怎样做一元购网站wordpress+淘客代码
  • 网站建设发展现状贵阳有哪些做网站的公司
  • 微博上如何做网站推广蝉知和wordpress
  • 泷澄建设集团网站北京建设执业资格注册网站
  • 门户网站建设情况报告深圳龙岗房价多少钱一平方米
  • 网站建设备案是什么ps培训班
  • 深圳网站推广优化wordpress 运行速度慢
  • 谁能给个网站谢谢发布广东建设工程信息网站
  • 网站建设用户需求分析中国加盟网
  • 建设上线网站seo关键词优化软件排名
  • 郑州手工网站建设公司企业做网站好做吗
  • 苏华建设集团网站产品营销网站