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

沈阳网站建设思路网站手机访问 动易

沈阳网站建设思路,网站手机访问 动易,wordpress生成tags页面,做网站几天目录 前言 源码地址 代码示例 引入依赖 先定两个实体用于转换 定义一个接口让所有转换器都集成 Apache BeanUtils BeanCopier bean-mapping bean-mapping-asm Dozer 自己写get/set JMapper json2json MapStruct#xff08;推荐#xff09; ModelMapper OriK…目录 前言 源码地址 代码示例 引入依赖 先定两个实体用于转换 定义一个接口让所有转换器都集成 Apache BeanUtils BeanCopier bean-mapping bean-mapping-asm Dozer 自己写get/set JMapper json2json MapStruct推荐 ModelMapper OriKa Spring BeanUtils 测试代码 测试结果绘制成图 总结 前言 本文章分别测试的对象转换工具为 MapStruct、JMapper、ModelMapper、Dozer、OriKa、BeanCopier、自己写get/set、 json2json、Apache BeanUtils、Spring BeanUtils、bean-mapping、bean-mapping-asm 源码地址 lasse-vo2dto: 测试市面上常用的实体转换工具的性能 代码示例 引入依赖 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency!-- Apache BeanUtils Begin --dependencygroupIdcommons-beanutils/groupIdartifactIdcommons-beanutils/artifactIdversion1.9.4/version/dependencydependencygroupIdcommons-logging/groupIdartifactIdcommons-logging/artifactIdversion1.2/version/dependencydependencygroupIdcommons-collections/groupIdartifactIdcommons-collections/artifactIdversion3.2.2/version/dependency!-- Apache BeanUtils End --!-- https://mvnrepository.com/artifact/com.github.houbb/bean-mapping-core --dependencygroupIdcom.github.houbb/groupIdartifactIdbean-mapping-core/artifactIdversion0.2.6/version/dependency!-- https://mvnrepository.com/artifact/com.github.houbb/bean-mapping-asm --dependencygroupIdcom.github.houbb/groupIdartifactIdbean-mapping-asm/artifactIdversion0.2.6/version/dependency!-- MapStruct begin --!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct --dependencygroupIdorg.mapstruct/groupIdartifactIdmapstruct/artifactIdversion1.4.2.Final/version/dependency!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-processor --dependencygroupIdorg.mapstruct/groupIdartifactIdmapstruct-processor/artifactIdversion1.4.2.Final/version/dependency!-- MapStruct end --dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.78/version/dependencydependencygroupIdma.glasnost.orika/groupIdartifactIdorika-core/artifactIdversion1.4.6/version/dependency!--Dozer --dependencygroupIdnet.sf.dozer/groupIdartifactIddozer-spring/artifactIdversion5.5.1/version/dependencydependencygroupIdnet.sf.dozer/groupIdartifactIddozer/artifactIdversion5.5.1/version/dependencydependencygroupIdorg.modelmapper/groupIdartifactIdmodelmapper/artifactIdversion1.1.0/version/dependencydependencygroupIdcom.googlecode.jmapper-framework/groupIdartifactIdjmapper-core/artifactIdversion1.6.1.CR2/version/dependency!-- http://modelmapper.org/getting-started/--dependencygroupIdorg.modelmapper/groupIdartifactIdmodelmapper/artifactIdversion2.3.0/version/dependency/dependencies 先定两个实体用于转换 public class UserVO {/*** 自增ID*/private Long id;/*** 用户ID*/private String userId;/*** 用户昵称*/private String userNickName;/*** 注册时间*/private Date createTime;//get/set/toString等方法省略。。。 } /*** 用户DTO*/ public class UserDTO {/*** 用户ID*/private String userId;/*** 用户昵称*/private String userNickName;/*** 注册时间*/private Date createTime; //get/set/toString等方法省略。。。 } 定义一个接口让所有转换器都集成 /*** 对象装配器接口*/ public interface IAssemblerSOURCE, TARGET {TARGET sourceToTarget(SOURCE var);} Apache BeanUtils Component public class ApacheCopyPropertiesAssembler implements IAssemblerUserVO, UserDTO {Overridepublic UserDTO sourceToTarget(UserVO var) {UserDTO userDTO new UserDTO();try {BeanUtils.copyProperties(userDTO, var);} catch (IllegalAccessException | InvocationTargetException e) {e.printStackTrace();}return userDTO;} } BeanCopier Component public class BeanCopierAssembler implements IAssemblerUserVO, UserDTO {Overridepublic UserDTO sourceToTarget(UserVO var) {UserDTO userDTO new UserDTO();BeanCopier beanCopier BeanCopier.create(var.getClass(), userDTO.getClass(), false);beanCopier.copy(var, userDTO, null);return userDTO;} } bean-mapping Component public class BeanMappingAssembler implements IAssemblerUserVO, UserDTO {Overridepublic UserDTO sourceToTarget(UserVO var) {UserDTO userDTO new UserDTO();BeanUtil.copyProperties(var, userDTO);return userDTO;} } bean-mapping-asm Component public class BeanMappingASMAssembler implements IAssemblerUserVO, UserDTO {Overridepublic UserDTO sourceToTarget(UserVO var) {UserDTO userDTO new UserDTO();AsmBeanUtil.copyProperties(var, userDTO);return userDTO;} } Dozer Component public class DozerAssembler implements IAssemblerUserVO, UserDTO {private static DozerBeanMapper mapper new DozerBeanMapper();Overridepublic UserDTO sourceToTarget(UserVO var) {return mapper.map(var, UserDTO.class);} } 自己写get/set Component(getSetAssembler) public class GetSetAssembler implements IAssemblerUserVO, UserDTO {Overridepublic UserDTO sourceToTarget(UserVO var) {UserDTO userDTO new UserDTO();userDTO.setUserId(var.getUserId());userDTO.setUserNickName(var.getUserNickName());userDTO.setCreateTime(var.getCreateTime());return userDTO;} } JMapper Component(jMapperAssembler) public class JMapperAssembler implements IAssemblerUserVO, UserDTO {Overridepublic UserDTO sourceToTarget(UserVO var) {JMapperUserDTO, UserVO jMapper new JMapper(UserDTO.class, UserVO.class, new JMapperAPI().add(JMapperAPI.mappedClass(UserDTO.class).add(JMapperAPI.attribute(userId).value(userId)).add(JMapperAPI.attribute(userNickName).value(userNickName)).add(JMapperAPI.attribute(createTime).value(createTime))));return jMapper.getDestination(var);}} json2json Component public class Json2JsonAssembler implements IAssemblerUserVO, UserDTO {Overridepublic UserDTO sourceToTarget(UserVO var) {String strJson JSON.toJSONString(var);return JSON.parseObject(strJson, UserDTO.class);} } MapStruct推荐 MapperConfig public interface IMappingSOURCE, TARGET {/*** 映射同名属性*/Mapping(target createTime, dateFormat yyyy-MM-dd HH:mm:ss)TARGET sourceToTarget(SOURCE var1);/*** 反向映射同名属性*/InheritInverseConfiguration(name sourceToTarget)SOURCE targetToSource(TARGET var1);/*** 映射同名属性集合形式*/InheritConfiguration(name sourceToTarget)ListTARGET sourceToTarget(ListSOURCE var1);/*** 反向映射同名属性集合形式*/InheritConfiguration(name targetToSource)ListSOURCE targetToSource(ListTARGET var1);/*** 映射同名属性集合流形式*/ListTARGET sourceToTarget(StreamSOURCE stream);/*** 反向映射同名属性集合流形式*/ListSOURCE targetToSource(StreamTARGET stream);} Mapper(componentModel spring, unmappedTargetPolicy ReportingPolicy.IGNORE, unmappedSourcePolicy ReportingPolicy.IGNORE) public interface UserDTOMapping extends IMappingUserVO, UserDTO {/** 用于测试的单例 */IMappingUserVO, UserDTO INSTANCE Mappers.getMapper(UserDTOMapping.class);Mapping(target userId, source userId)Mapping(target createTime, dateFormat yyyy-MM-dd HH:mm:ss)OverrideUserDTO sourceToTarget(UserVO var1);Mapping(target userId, source userId)Mapping(target createTime, dateFormat yyyy-MM-dd HH:mm:ss)OverrideUserVO targetToSource(UserDTO var1); } Component public class MapStructAssembler implements IAssemblerUserVO, UserDTO {Resourceprivate IMappingUserVO, UserDTO userDTOMapping;Overridepublic UserDTO sourceToTarget(UserVO var) {return userDTOMapping.sourceToTarget(var);}} ModelMapper Component public class ModelMapperAssembler implements IAssemblerUserVO, UserDTO {private static ModelMapper modelMapper new ModelMapper();static {modelMapper.addMappings(new PropertyMapUserVO, UserDTO() {Overrideprotected void configure() {// 属性值不一样可以自己操作map().setUserId(source.getUserId());}});}Overridepublic UserDTO sourceToTarget(UserVO var) {return modelMapper.map(var, UserDTO.class);}} OriKa Component public class OrikaAssembler implements IAssemblerUserVO, UserDTO {/*** 构造一个MapperFactory*/private static MapperFactory mapperFactory new DefaultMapperFactory.Builder().build();static {mapperFactory.classMap(UserDTO.class, UserVO.class).field(userId, userId) // 字段不一致时可以指定.byDefault().register();}Overridepublic UserDTO sourceToTarget(UserVO var) {return mapperFactory.getMapperFacade().map(var, UserDTO.class);}} Spring BeanUtils Component public class SpringCopyPropertiesAssembler implements IAssemblerUserVO, UserDTO {Overridepublic UserDTO sourceToTarget(UserVO var) {UserDTO userDTO new UserDTO();BeanUtils.copyProperties(var, userDTO);return userDTO;} } 测试代码 RunWith(SpringRunner.class) SpringBootTest public class ApiTest {private Logger logger LoggerFactory.getLogger(ApiTest.class);Resource(name apacheCopyPropertiesAssembler)private IAssemblerUserVO, UserDTO apacheCopyPropertiesAssembler;Resource(name beanCopierAssembler)private IAssemblerUserVO, UserDTO beanCopierAssembler;Resource(name beanMappingAssembler)private IAssemblerUserVO, UserDTO beanMappingAssembler;Resource(name beanMappingASMAssembler)private IAssemblerUserVO, UserDTO beanMappingASMAssembler;Resource(name getSetAssembler)private IAssemblerUserVO, UserDTO getSetAssembler;Resource(name mapStructAssembler)private IAssemblerUserVO, UserDTO mapStructAssembler;Resource(name springCopyPropertiesAssembler)private IAssemblerUserVO, UserDTO springCopyPropertiesAssembler;Resource(name orikaAssembler)private IAssemblerUserVO, UserDTO orikaAssembler;Resource(name dozerAssembler)private IAssemblerUserVO, UserDTO dozerAssembler;Resource(name modelMapperAssembler)private IAssemblerUserVO, UserDTO modelMapperAssembler;Resource(name jMapperAssembler)private IAssemblerUserVO, UserDTO jMapperAssembler;Resource(name json2JsonAssembler)private IAssemblerUserVO, UserDTO json2JsonAssembler;private Long cycleIndex100000L;private UserVO userVO new UserVO();Testpublic void all(){System.out.println(各跑cycleIndex次);test_apacheCopyPropertiesAssembler();test_beanCopierAssembler();test_beanMappingAssembler();test_beanMappingASMAssembler();test_getSetAssembler();test_mapStructAssembler();test_springCopyPropertiesAssembler();test_orikaAssembler();test_dozerAssembler();test_modelMapperAssembler();test_jMapperAssembler();test_json2JsonAssembler();}Beforepublic void initData() {userVO.setId(1001L);userVO.setUserId(007);userVO.setUserNickName(lasse);userVO.setCreateTime(new Date());}Testpublic void test_apacheCopyPropertiesAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO apacheCopyPropertiesAssembler.sourceToTarget(userVO);}System.out.println(apacheCopyPropertiesAssembler方法耗时 (System.currentTimeMillis() - start) ms);// 方法耗时2050ms}Testpublic void test_beanCopierAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO beanCopierAssembler.sourceToTarget(userVO);}System.out.println(beanCopierAssembler方法耗时 (System.currentTimeMillis() - start) ms);// 方法耗时53ms}Testpublic void test_beanMappingAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO beanMappingAssembler.sourceToTarget(userVO);}System.out.println(beanMappingAssembler方法耗时 (System.currentTimeMillis() - start) ms);// 方法耗时162ms}Testpublic void test_beanMappingASMAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO beanMappingASMAssembler.sourceToTarget(userVO);}System.out.println(beanMappingASMAssembler方法耗时 (System.currentTimeMillis() - start) ms);// 方法耗时90ms}// 方法耗时3msTestpublic void test_getSetAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO getSetAssembler.sourceToTarget(userVO);}System.out.println(getSetAssembler方法耗时 (System.currentTimeMillis() - start) ms);}Testpublic void test_mapStructAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO mapStructAssembler.sourceToTarget(userVO);}System.out.println(mapStructAssembler方法耗时 (System.currentTimeMillis() - start) ms);// 方法耗时4ms}Testpublic void test_springCopyPropertiesAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO springCopyPropertiesAssembler.sourceToTarget(userVO);}System.out.println(springCopyPropertiesAssembler方法耗时 (System.currentTimeMillis() - start) ms);// 方法耗时64ms}Testpublic void test_orikaAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO orikaAssembler.sourceToTarget(userVO);}System.out.println(orikaAssembler方法耗时 (System.currentTimeMillis() - start) ms);}Testpublic void test_dozerAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO dozerAssembler.sourceToTarget(userVO);}System.out.println(dozerAssembler方法耗时 (System.currentTimeMillis() - start) ms);}Testpublic void test_modelMapperAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO modelMapperAssembler.sourceToTarget(userVO);}System.out.println(modelMapperAssembler方法耗时 (System.currentTimeMillis() - start) ms);}Testpublic void test_jMapperAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO jMapperAssembler.sourceToTarget(userVO);}System.out.println(jMapperAssembler方法耗时 (System.currentTimeMillis() - start) ms);}Testpublic void test_json2JsonAssembler() {long start System.currentTimeMillis();for (int i 0; i cycleIndex; i) {UserDTO userDTO json2JsonAssembler.sourceToTarget(userVO);}System.out.println(json2JsonAssembler方法耗时 (System.currentTimeMillis() - start) ms);}} 测试结果绘制成图 用于对象属性转换有12种接下来我们分别测试这12种属性转换操作分别在一百次、一千次、一万次、十万次、一百万次时候的性能时间对比。 总结 BeanUtils.copyProperties 是大家代码里最常出现的工具类但只要你不把它用错成 Apache 包下的而是使用 Spring 提供的就基本还不会对性能造成多大影响。但如果说性能更好可替代手动get、set的还是 MapStruct 更好用因为它本身就是在编译期生成get、set代码和我们写get、set一样。其他一些组件包主要基于 AOP、ASM、CGlib的技术手段实现的所以也会有相应的性能损耗
http://www.hkea.cn/news/14564333/

相关文章:

  • 哪家公司制作网站wordpress更换文章背景色
  • 汕头企业建站中国城乡住房建设部网站
  • 网站建设与维护论文wordpress 多人编辑器
  • 网站开发php支付接口网站对图片优化吗
  • 手机大型网站服务器有了网站怎么做
  • 重庆綦江网站制作公司推荐长春建设网站
  • 织梦做双语网站著名的wordpress主题
  • 旅游包车网站最新模板百度知道个人中心
  • 内网网站建设的必要性做旅游海报的软件或是网站
  • 兰溪好品质高端网站设计指纹锁在什么网站做宣传好
  • 怎么在百度上搜到自己的网站红酒哪个网站做的好
  • 上海做响应式网站的公司天津建网站
  • 衡水网站建设联系电话如何能让网站尽快备案通过
  • 现在帮人做网站赚钱吗淮北论坛官网
  • 公司网站域名注册百度收录排名好的网站
  • 加上强机关网站建设管理的通知wordpress 手机无菜单
  • 毕业设计网站建设题目网络运维工程师简历怎么写
  • 网站关键词太多切实加强网站建设
  • 孝义网站开发公司做app和网站怎样
  • 福州免费自助建站模板怎么做百度seo网站
  • 无网站做百度推广做外贸主要看什么网站
  • 高端网站建设一般多少钱申请个人网站
  • 做网站的要多少钱外贸公司网站设计哪家好
  • 做的时间长的网站制作公司哪家好wordpress 小工具添加图片大小
  • 网站架构分析怎么写电商运营培训机构
  • 新网站如何做排名网站建设费能计入无形资产
  • 做问答营销的网站有哪些广元商城网站开发
  • 建设银行租房网站首页网站开发外包公司坑
  • 中小企业加盟网站建设wordpress直播播放器
  • 网站名 注册京粉购物网站怎么做