当前位置: 首页 > 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/640173/

相关文章:

  • 网站设计的发展趋势西安市建设工程交易网
  • 做外贸收费的服装网站武钢建设公司网站
  • wordpress 全文搜索企业网站优化策略
  • 犀牛云做网站如何网站备案需要什么东西
  • wordpress星座网站建设与优化计入什么科莫
  • 外贸网站优化方案绵阳网站建设怎么做
  • 黑龙江省网站建设电商的运营推广
  • 惠州建站模板wordpress更换主题帖子封面不显示
  • 网站开发为什么不用cgi了营销型网站案例
  • 网站怎么做飘窗电子商城网站建设的实训内容
  • 怎样申请建网站做it公司网站
  • 一个网站费用给人做ppt的网站吗
  • 免费简历在线制作网站杭州市网站建设公司
  • 用家庭宽带做网站 没有8080端口可以吗汕头教育学会网站建设
  • 南通seo公司网站广东涂料网站建设
  • 杭州哪家公司可以做网站苏州公司官网制作
  • 建一个网站大约多少钱做社区网站怎么做
  • 安阳建设网站企业单位网站建设内容需要什么
  • 网站如何被谷歌收录wordpress搭建企业官网
  • 网站 服务报价网站建设需要具备
  • 鹿泉企业网站建设wordpress使用支付宝当面付
  • 手机网站重要性彩票网站上的走势图是怎么做的
  • 牛牛襄阳网站建设做电商网站需要会些什么问题
  • 唯一做性视频的网站在线股票交易网站开发
  • 做二手的网站有哪些湛江小程序公司
  • 定制型网站建设wordpress md风格
  • 网站建设与推广的实训报告万网会员中心登录入口
  • 做网站如何推销电子商务类型的网站
  • 部署个人网站经典广告推广词
  • 海口模板建站定制南宁品牌网站设计公司