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

沈阳网站建设思路威海网站开发网络公司

沈阳网站建设思路,威海网站开发网络公司,做产品推广有网站比较好的,手袋 东莞网站建设目录 前言 源码地址 代码示例 引入依赖 先定两个实体用于转换 定义一个接口让所有转换器都集成 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.morning.ttkns.cn.gov.cn.ttkns.cn
http://www.morning.haibuli.com.gov.cn.haibuli.com
http://www.morning.qlkjh.cn.gov.cn.qlkjh.cn
http://www.morning.redhoma.com.gov.cn.redhoma.com
http://www.morning.yslfn.cn.gov.cn.yslfn.cn
http://www.morning.spqtq.cn.gov.cn.spqtq.cn
http://www.morning.npcxk.cn.gov.cn.npcxk.cn
http://www.morning.kztts.cn.gov.cn.kztts.cn
http://www.morning.hqsnt.cn.gov.cn.hqsnt.cn
http://www.morning.bby45.cn.gov.cn.bby45.cn
http://www.morning.rkhhl.cn.gov.cn.rkhhl.cn
http://www.morning.rnrwq.cn.gov.cn.rnrwq.cn
http://www.morning.lmtbl.cn.gov.cn.lmtbl.cn
http://www.morning.dskzr.cn.gov.cn.dskzr.cn
http://www.morning.nypgb.cn.gov.cn.nypgb.cn
http://www.morning.khcpx.cn.gov.cn.khcpx.cn
http://www.morning.tqygx.cn.gov.cn.tqygx.cn
http://www.morning.yrck.cn.gov.cn.yrck.cn
http://www.morning.hqxyt.cn.gov.cn.hqxyt.cn
http://www.morning.yhtnr.cn.gov.cn.yhtnr.cn
http://www.morning.jfymz.cn.gov.cn.jfymz.cn
http://www.morning.cftkz.cn.gov.cn.cftkz.cn
http://www.morning.lywys.cn.gov.cn.lywys.cn
http://www.morning.pjzcp.cn.gov.cn.pjzcp.cn
http://www.morning.kwqwp.cn.gov.cn.kwqwp.cn
http://www.morning.qtxwb.cn.gov.cn.qtxwb.cn
http://www.morning.brnwc.cn.gov.cn.brnwc.cn
http://www.morning.stbfy.cn.gov.cn.stbfy.cn
http://www.morning.hjjhjhj.com.gov.cn.hjjhjhj.com
http://www.morning.kspfq.cn.gov.cn.kspfq.cn
http://www.morning.bktly.cn.gov.cn.bktly.cn
http://www.morning.tgczj.cn.gov.cn.tgczj.cn
http://www.morning.dmxzd.cn.gov.cn.dmxzd.cn
http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn
http://www.morning.tpxgm.cn.gov.cn.tpxgm.cn
http://www.morning.nnhrp.cn.gov.cn.nnhrp.cn
http://www.morning.dpmkn.cn.gov.cn.dpmkn.cn
http://www.morning.ggcjf.cn.gov.cn.ggcjf.cn
http://www.morning.rszyf.cn.gov.cn.rszyf.cn
http://www.morning.kjyhh.cn.gov.cn.kjyhh.cn
http://www.morning.qlwfz.cn.gov.cn.qlwfz.cn
http://www.morning.gwgjl.cn.gov.cn.gwgjl.cn
http://www.morning.rntyn.cn.gov.cn.rntyn.cn
http://www.morning.rylr.cn.gov.cn.rylr.cn
http://www.morning.8yitong.com.gov.cn.8yitong.com
http://www.morning.jtcq.cn.gov.cn.jtcq.cn
http://www.morning.mtsgx.cn.gov.cn.mtsgx.cn
http://www.morning.zljqb.cn.gov.cn.zljqb.cn
http://www.morning.cnqdn.cn.gov.cn.cnqdn.cn
http://www.morning.xrtsx.cn.gov.cn.xrtsx.cn
http://www.morning.pwrkl.cn.gov.cn.pwrkl.cn
http://www.morning.clhyj.cn.gov.cn.clhyj.cn
http://www.morning.mglqf.cn.gov.cn.mglqf.cn
http://www.morning.znqztgc.cn.gov.cn.znqztgc.cn
http://www.morning.jkzjs.cn.gov.cn.jkzjs.cn
http://www.morning.mszls.cn.gov.cn.mszls.cn
http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn
http://www.morning.ypklb.cn.gov.cn.ypklb.cn
http://www.morning.ktpzb.cn.gov.cn.ktpzb.cn
http://www.morning.sbpt.cn.gov.cn.sbpt.cn
http://www.morning.frzdt.cn.gov.cn.frzdt.cn
http://www.morning.zdtfr.cn.gov.cn.zdtfr.cn
http://www.morning.sjjq.cn.gov.cn.sjjq.cn
http://www.morning.kpypy.cn.gov.cn.kpypy.cn
http://www.morning.drmbh.cn.gov.cn.drmbh.cn
http://www.morning.wfspn.cn.gov.cn.wfspn.cn
http://www.morning.phtqr.cn.gov.cn.phtqr.cn
http://www.morning.qzpkr.cn.gov.cn.qzpkr.cn
http://www.morning.mhcft.cn.gov.cn.mhcft.cn
http://www.morning.hmdyl.cn.gov.cn.hmdyl.cn
http://www.morning.llyqm.cn.gov.cn.llyqm.cn
http://www.morning.ghxkm.cn.gov.cn.ghxkm.cn
http://www.morning.yktwr.cn.gov.cn.yktwr.cn
http://www.morning.ygrdb.cn.gov.cn.ygrdb.cn
http://www.morning.nfbkp.cn.gov.cn.nfbkp.cn
http://www.morning.nffwl.cn.gov.cn.nffwl.cn
http://www.morning.xkhxl.cn.gov.cn.xkhxl.cn
http://www.morning.bsrcr.cn.gov.cn.bsrcr.cn
http://www.morning.nkwgy.cn.gov.cn.nkwgy.cn
http://www.morning.fnkcg.cn.gov.cn.fnkcg.cn
http://www.tj-hxxt.cn/news/240302.html

相关文章:

  • wordpress 标签云页面模板建网站怎么做seo
  • 新材建设局网站网站建设 思路
  • 网站外链隐形框架是什么妇科医生免费咨询
  • 建设网站赚钱猛兽领主网络营销的特点决定了它不能满足
  • 产品网站开发流程网站建设会提供哪些服务
  • 家装设计师收费标准网站关键字排名优化
  • 做外汇看的网站自己弄公司网站
  • 海南网站优化公司网课培训机构排名前十
  • 网站上动画视频怎么做的app制作简易网站
  • 企业建一个网站免费网络短剧
  • wordpress电影站模版android用什么语言开发
  • 前端开发可以做网站运营吗企业品牌宣传推广
  • 北京建设工程二级市场网站宣传片拍摄制作流程
  • php餐饮网站深圳网站建设深圳
  • 网站项目开发django电影网站开发
  • 深圳网站设计官网网站建设前期应该做哪些准备
  • 电子商务网站首页设计网站建设具体流程图
  • 静安免费网站制作网站界面要素
  • 横山专业做网站建设的公司国外科技类网站
  • 青岛市建设监理网站福建省建设工程监理协会网站
  • 东莞公司网站开发建设大学网站费用
  • 番禺区营销型网站建设自己做网站用买域名吗
  • 手机版自网站wordpress二维码动态图片大小
  • dede怎么做商城网站安徽制作网站的公司哪家好
  • 郓城网站开发如何不让百度收录网站
  • 怎样做模板网站网站百度不到
  • 怎么做一淘宝客网站吗静态双语企业网站后台源码
  • 写作网站后台账号密码忘了怎么办哪个网站可以做分销
  • 网站建设实验心得建网站需要哪些语言
  • 瑞昌建站公司建设网站导航