范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

推荐这款类型转换神器!Mapstruct新出的Spring插件

  Mapstruct可以代替 BeanUtil 来进行DTO 、VO 、PO 之间的转换。它使用的是Java编译期的 annotation processor 机制,说白了它就是一个代码生成器,代替你手工进行类型转换期间的取值赋值操作。
  小编很多项目都使用了它,代码清爽得很,增加了大量摸鱼时间,用过的都说好。 @Mapper(componentModel = "spring") public interface AreaMapping {      List toVos(List areas); }
  就这么几行就把一个 PO 的集合转换成了对应 VO 的集合。 // spring bean  @Autowired AreaMapping areaMapping      // 转换源 areas     List areas = ……; // 转换目标 vos  List vos = areaMapping.toVos(areas)
  换成你手写试试,起码得五分之一炷香的功夫。
  但是这样写还是不太爽,每次都要挂对应的Mapper类。 Converter
  Spring framework 提供了一个 Converter 接口:@FunctionalInterface public interface Converter {     @Nullable     T convert(S source);      default  Converter andThen(Converter<? super T, ? extends U> after) {         Assert.notNull(after, "After Converter must not be null");         return (s) -> {             T initialResult = this.convert(s);             return initialResult != null ? after.convert(initialResult) : null;         };     } }
  它的作用是将 S 转换为T ,这和Mapstruct 的作用不谋而合。
  Converter 会通过ConverterRegistry 这个注册接口注册到ConversionService ,然后你就可以通过ConversionService 的convert 方法来进行转换:     T convert(@Nullable Object source, Class targetType); MapStruct Spring Extensions
  根据上面的机制官方推出了 MapStruct Spring Extensions 插件, 它实现了一种机制,所有的 Mapstruct 映射接口( Mapper )只要实现了 Converter ,都会自动注册到ConversionService ,我们只需要通过ConversionService 就能完成任何转换操作。/**  * @author felord.cn  * @since 1.0.0  */ @Mapper(componentModel = "spring") public interface CarMapper extends Converter {      @Mapping(target = "seats", source = "seatConfiguration")     CarDto convert(Car car); }
  调用时: @Autowired private ConversionService conversionService;  Car car = ……; CarDto carDto = conversionService.convert(car,CarDto.class);
  MapStruct Spring Extensions  会自动生成一个适配类处理 Mapper 注册: package org.mapstruct.extensions.spring.converter;  import cn.felord.mapstruct.entity.Car; import cn.felord.mapstruct.entity.CarDto; import org.springframework.context.annotation.Lazy; import org.springframework.core.convert.ConversionService; import org.springframework.stereotype.Component; /**  * @author felord.cn  * @since 1.0.0  */ @Component public class ConversionServiceAdapter {     private final ConversionService conversionService;      public ConversionServiceAdapter(@Lazy final ConversionService conversionService) {         this.conversionService = conversionService;     }      public CarDto mapCarToCarDto(final Car source) {         return (CarDto)this.conversionService.convert(source, CarDto.class);     } } 自定义自定义适配类的包路径和名称
  默认情况下,生成的适配类将位于包 org.mapstruct.extensions.spring.converter 中,名称固定为ConversionServiceAdapter 。如果你希望修改包路径或者名称,你可以这样:package cn.felord.mapstruct.config;  import org.mapstruct.MapperConfig; import org.mapstruct.extensions.spring.SpringMapperConfig;  /**  * @author felord.cn  * @since 1.0.0  */ @MapperConfig(componentModel = "spring") @SpringMapperConfig(conversionServiceAdapterPackage = "cn.felord.mapstruct.config",         conversionServiceAdapterClassName = "MapStructConversionServiceAdapter") public class MapperSpringConfig { }
  不指定 conversionServiceAdapterPackage 元素,生成的 Adapter 类将与注解的 Config 驻留在同一个包中,所以上面的路径是可以省略的。指定ConversionService
  如果你的 Spring IoC 容器中有多个 ConversionService ,你可以通过@SpringMapperConfig 注解的conversionServiceBeanName  参数指定。package cn.felord.mapstruct.config;  import org.mapstruct.MapperConfig; import org.mapstruct.extensions.spring.SpringMapperConfig;  /**  * @author felord.cn  * @since 1.0.0  */ @MapperConfig(componentModel = "spring") @SpringMapperConfig(conversionServiceAdapterPackage = "cn.felord.mapstruct.config",         conversionServiceAdapterClassName = "MapStructConversionServiceAdapter",                    conversionServiceBeanName = "myConversionService") public class MapperSpringConfig { } 集成Spring的内置转换
  Spring 内部提供了很多好用的 Converter 实现,有的并不直接开放,如果你想用Mapstruct 的机制使用它们,可以通过@SpringMapperConfig 注解的 externalConversions 注册它们。@MapperConfig(componentModel = "spring") @SpringMapperConfig(    externalConversions = @ExternalConversion(sourceType = String.class, targetType = Locale.class)) public interface MapstructConfig {}
  会在适配器中自动生成相应的转换: @Component public class ConversionServiceAdapter {   private final ConversionService conversionService;    public ConversionServiceAdapter(@Lazy final ConversionService conversionService) {     this.conversionService = conversionService;   }    public Locale mapStringToLocale(final String source) {     return conversionService.convert(source, Locale.class);   } } 总结
  mapstruct-spring-annotations  使开发人员能够通过 ConversionService 使用定义的 Mapstruct  映射器,而不必单独导入每个 Mapper ,从而允许 Mapper  之间的松散耦合。,它本身不会影响Mapstruct 的机制。
  来源:https://mp.weixin.qq.com/s/2W4OwmSp3ZGFkvEKWQQYdw

助力两轮电动车出行,易马达布局两轮车换电绿色能源网络REAL100记者李馨婷柯晓斌外卖骑手遍布大街小巷的今天,作为必不可少的短途交通工具,两轮电动车在即时配送领域拥有很大市场。目前,两轮车换电主要面对B端市场用户,服务于外卖骑手快递员等即时配送从15日开抢!最后一批彩云消费券要来了记者从云南省商务厅获悉1月15日将开启第四批彩云消费券的发放值得注意的是这也是最后一批彩云消费券彩云消费券分为通用券和专用券两种,每批次消费券发放时,消费者可通过一部手机逛商圈微信2022年开始不能摆脱电商直播的消费品公司注定慢慢死亡以鞋服公司为例证。先搞清楚一个问题,鞋服公司的钱应该花在什么地方,才能提高产品竞争力获得消费者愿意支付高溢价购买?只有一个地方,那就是研发和设计,也就是要把大量的费用花在研发师喝设块元素行内块元素行内元素小结很多人经常会把块元素行内块元素行内元素的知识混淆掉,今天我归纳下1。块元素独占一行,而行内块元素和行内元素可以和别人共处一行2。常见的块元素有pph1oluldltabelform科普猪心移植给人背后有哪些科技突破新华社北京1月11日电(记者冯玉婧)美国马里兰大学医学中心10日发布消息说,医学专家将经基因改造的猪的心脏移植入一名美国心脏病人体内,属全球首例。人体排异反应通常是异种器官移植中的输出最高分学生信息给定N个学生的基本信息,包括学号(由5个数字组成的字符串)姓名(长度小于10的不包含空白字符的非空字符串)和成绩(0,100区间内的整数),输出最高分的学生信息。函数接口定义str拉勾人才白皮书2021年互联网平均薪酬增长13,但求职招聘两头难来源中国经济周刊经济网中国经济周刊经济网讯1月11日消息,拉勾近日发布了2021年互联网人才招聘白皮书(下称白皮书),解读2021年度的互联网行业人才变化和趋势。白皮书显示,202黑莓新机仍在路上诺基亚又发四款新品,但你会买么?一代经典的黑莓手机,堪称多少人挥之不去的美好回忆。但随着加拿大黑莓公司宣布自2022年1月4日起,停止更新黑莓手机的服务系统后,或许经典注定成为回忆。不过上述事件还有续集,那就是O正在走红的指纹锁,为何很多人称它是智商税?来听听大实话随着人工智能和物联网技术的发展,这几年智能家居产品越来越受到人们的认可和欢迎!尤其是指纹锁,作为入口级的智能家居产品,随着品牌与种类的增多,加上价格的逐渐走低,指纹锁成为人们最受关MIUI13稳定版正式推送达4GB,这些机型设备来升级了小米MIUI13系统稳定版首批升级更新推送如期开始啦,小米在去年12月的时候推出了MIUI13系统,这是MIUI系统新的大版本升级,小米MIUI13系统增加了多个新功能在流畅性稳定运动潮玩尖货,南卡NANK骨传导RunnerPro3蓝牙耳机体验分享如果你是一位平时爱健身的小伙伴,肯定或多或少听过骨传导耳机系列的产品。只要你稍加留意就会发现无论是马拉松比赛还是户外骑行,已经有越来越多的运动爱好者戴上了骨传导蓝牙耳机。究其原因,
Spark的shuffle和MapReduce的shuffle对比MapperReduce的shuffleshuffle阶段划分Map阶段和Reduce阶段任务MapTask和ReduceTaskshuffle过程Map阶段shuffle分区排序华为总裁ampampquot任正非ampampquot对ampampquot炫耀ampampquot高文凭高学历者的忠告政治家军事家是大学培养出来的吗?百万千万富翁是大学培养出来的吗?各类成功人士是大学培养出来的吗?任正非说请收起你炫耀的高学历,大学文凭的自以为是,真的没用据权威资料统计,世界福布斯余承东太难了,大车企不和华为合作造车,小车企实力又太差3月份,华为与赛力斯合作的AITO问界M5,一共卖了3045台。而因为这3000多台,整个赛力斯的销量,同比增长了13倍多。首销当月,就能够达到这个销量,真的算是很成功了,但另外一代步SUV10W以内开回家哪吒UPro!!续航400km10W带回家百公里电费约8。4元54kw68kw的锂电池电池电机电控终身质保赠送充电桩快充半小时宽敞5座AutoHold自动驻车智能AI机器人小U定速微信支付或取消?我们账上的余额会清零吗?准确答案来了但同时人们还有疑问,新的政策推行之后,老百姓在微信账号里面的余额会不会被清零?关于这个问题,有关部门给出了正确的答案。对于新的规定,部分网友也表示不能理解,因为规定出台之后,许多街多台复合机器人里工打造精密制造行业标杆案例里工是一家拥有36年历史的精密加工企业,内部的未来车间是一个24小时运作的离散型柔性化生产场所,里面配置了近百台国际知名品牌的数控加工设备。2019年开始未来车间逐步升级智能化生产虚拟数字人企业排名出炉百度位列国内综合实力第一彭思雨中国证券报中证网中证网讯(记者彭思雨)互联网周刊日前发布的2021虚拟数字人企业排名TOP50榜单显示,百度凭借央视虚拟主播冬奥手语数字人主播,排名国内数字人产业综合实力第一无能的产品经理是咋样的?今天,咱们就聊聊差等生,优秀的不专门表扬。互联网发展到今天,产品经理似乎入门门槛很低,太多非计算机专业的毕业生进入互联网大厂,不能写代码,第一选择就是产品经理,这波人,有些是聪明人俄乌冲突让美军学到啥?五角大楼官员认为战争中有样东西比钢铁大炮更重要安225被火力摧毁据美国防务新闻网站报道,根据五角大楼联合人工智能中心主任的说法,俄罗斯对邻国乌克兰的持续攻击揭示了战争的演变状态,为美国提供了可以用来了解其自身防御态势的见解。4mavenjar冲突解决方案mvndependencytree查看依赖树mvndependencytreeDverboseDincludesgroupIdartifactId如mvndependencytre麻辣烫治疗共享单车的皮肤病,需要政企携手川观新闻记者赵荣昌很多骑过共享单车的市民都有这样的经历车身粘满小广告小广告遮挡扫车码共享单车被迫染上皮肤病,成为非法广告的新宿主。在共享单车投放市场初期,由于其具有较好的流动性,同