使用Mapster实现双向映射,解放搬砖体力活
经常会有对象属性互相赋值的操作,但是频繁的写实在是搬运工一样,比较难受比如下面两个类
public class AgencyBdm {public new int Id { set; get; }public string AgencyId { set; get; }public string AgencyName { set; get; }public string Region { set; get; }public string Bdm { set; get; }public string BdmEmail { set; get; }public string Dosm { set; get; }public string DosmEmail { set; get; }public DateTime CreateDate { get; set; }public string Modifier { get; set; }public string Creator { get; set; }public DateTime? UpdateDate { get; set; }public List<string> Errors { get; set; } = new List<string>();public int RowNumber { get; set; }}public class AgencyContactModel{public string AGENCYID { get; set; }public string AGENCY_NAME { get; set; }public string REGION { get; set; }public string BDM { get; set; }public string BDM_EMAIL { get; set; }public string DOSM { set; get; }public string DOSM_EMAIL { set; get; }public DateTime CreateDate { set; get; }}
他需要一个个的赋值操作
var model = new AgencyContactModel();var dbModel = new AgencyBdm {....此次赋值省略}model.Id = dbModel.Id;model.AGENCYID = dbModel.AgencyId;model.AGENCY_NAME = dbModel.AgencyName;model.REGION = dbModel.Region;model.BDM = dbModel.Bdm;model.BDM_EMAIL = dbModel.BdmEmail;model.DOSM = dbModel.Dosm;model.DOSM_EMAIL = dbModel.DosmEmail;
然而这还不够,我们经常还需要反向操作赋值
dbModel.AgencyId = model.AGENCYID;
这样的体力活着实让人乏累,也许很多人说可以用AutoMapper,但是AutoMapper 仍然不能让我感到满意,AutoMapper 的代码我就不写了,我们使用Mapster,个人觉得很轻巧,很好用。下面以一个在 Asp.net MVC 的Controller 为例,去设置两个对象属性的双向映射关系
public class SellOutPlanController : Controller{// 之所以用静态构造函数是因为只会执行一次,TypeAdapterConfig 执行多次时候报错的static SellOutPlanController(){// 设置对象的双向映射,TwoWays就表示双向映射TypeAdapterConfig<AgencyBdm, AgencyContactModel>.NewConfig().TwoWays().Map(dto => dto.Id, poco => poco.Id).Map(dto => dto.AGENCYID, poco => poco.AgencyId).Map(dto => dto.AGENCY_NAME, poco => poco.AgencyName).Map(dto => dto.REGION, poco => poco.Region).Map(dto => dto.BDM, poco => poco.Bdm).Map(dto => dto.BDM_EMAIL, poco => poco.BdmEmail).Map(dto => dto.DOSM, poco => poco.Dosm).Map(dto => dto.DOSM_EMAIL, poco => poco.DosmEmail).Map(dto => dto.CreateDate, poco => poco.CreateDate);}// 然后我们到 Action 下面来使用咯,把 AgencyContactModel 拷贝到 AgencyContactModel 对象public ActionResult ModelSwitch1(){var model = new AgencyContactModel();var dbModel = new AgencyBdm {...此处赋值省略}model = dbModel.Adapt<AgencyContactModel>();... 返回结果省略}// 然后下面的倒过来,把 AgencyContactModel 拷贝到 AgencyContactModel public ActionResult ModelSwitch2(){var dbModel = new AgencyBdm();var model = new AgencyContactModel{...此处赋值省略}dbModel = model .Adapt<AgencyBdm>();... 返回结果省略}}
可以看到,无论是对象A拷贝到对象B,还是对象B拷贝到对象A,只用配置一次就可以了,跟AutoMapper 的代码量我就不去对比,反正用过的都说香,再也不想用AutoMapper了,唯一一点就是这个库的知名度还赶不上AutoMapper
相关文章:
使用Mapster实现双向映射,解放搬砖体力活
经常会有对象属性互相赋值的操作,但是频繁的写实在是搬运工一样,比较难受比如下面两个类 public class AgencyBdm {public new int Id { set; get; }public string AgencyId { set; get; }public string AgencyName { set; get; }public string Region {…...
一种基于屏幕分辨率的RTSP主子码流切换的多路视频监控的播放方案
技术背景: 用户场景下,存在多个监控场所的100路监控摄像头,例如:大华、海康、宇视、杭州宇泛的枪机、球机、半球、NVR、DVR等不同类型的监控设备,通过视频监控平台进行设备的管理,通过RTSP拉流的方案管理监…...
SpringBoot日志+SpringMVC+UUID重命名文件+Idea热部署
目录 【SpringBoot日志】 什么是日志,日志的作用 关于日志的基本信息,又有哪些呢? 关于日志的级别 Springboot内置SLF4J【门面模式】 和 logback【日志框架】 在配置文件中可以设置日志级别【以.yml为例】 SpringBoot 持久化的保存日…...
向日葵远程控制中的键盘异常问题
本文记录的是ubuntu 20.04 上, 向日葵的最高版本目前只有V 11.0.1.44968(2022.02) 我的被控制和 控制端都是上述环境; 起因,由于我昨天在控制端按下了 win/ 或者是其他的组合键 (具体哪个键盘确实没有注…...
【iOS免越狱】利用IOS自动化web-driver-agent_appium-实现自动点击+滑动屏幕
1.目标 在做饭、锻炼等无法腾出双手的场景中,想刷刷抖音 刷抖音的时候有太多的广告 如何解决痛点 抖音自动播放下一个视频 iOS系统高版本无法 越狱 安装插件 2.操作环境 MAC一台,安装 Xcode iPhone一台,16 系统以上最佳 3.流程 下载最…...
聊聊“JVM 调优JVM 性能优化”是怎么个事?
所谓“调优”就是一个诊断和处理手段,最终的目标是让系统的处理能力,也就是“性能”达到最优化。 计算机系统中,性能相关的资源主要分为这几类: CPU:CPU 是系统最关键的计算资源,在单位时间内有限…...
再获Gartner认可!持安科技获评ZTNA领域代表供应商
近日,全球权威市场研究与咨询机构Gartner发布了《Hype Cycle for Security in China, 2023(2023中国安全技术成熟度曲线)》报告,对2023年的20个中国安全技术领域的现状与发展趋势进行了详细的分析与解读。 其中,持安科…...
微服务-Feign
文章目录 Feign介绍Feign的基本使用自定义Feign的配置Feign性能优化Feign最佳实践 Feign介绍 RestTemplate远程调用存在的问题:代码可读性差,java代码中夹杂url;参数复杂很难维护 String url "http://userservice/user/" order.g…...
jsp获取数据 jsp直接获取后端数据 获取input选中的值 单选 没 checked属性
let str0${showList}; let str1${showList}; 然后可以通过JSON.parse() 转 获取input选中的值 //goodsType 按类别 goods按货品var oneType $("input[ namecriteria1 ] ").val();//count按数量 totalprice按费用var twoType $("input[ namecriteria2 ] &q…...
React 中 keys 的作用是什么?
目录 前言:React 中的 Keys 的重要性 为什么 Keys 重要? 详解:key 属性的基本概念 用法:key 属性的示例 解析:key 属性的优势和局限性 优势: 局限性: key 属性的最佳实践 稳定的唯一标…...
代码随想录 | Day46
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 今日学习目标一、算法题1.完全背包问题2.零钱兑换 II3.组合总和 Ⅳ 学习及参考书籍 今日学习目标 完全背包问题 零钱兑换 II(518) 组合总和…...
word行内插入mathtype 公式后行距变大解决办法
现象 word行内插入mathtype 公式后行距变大 解决方法 选中要进行操作的那些行,依次单击菜单命令“格式→段落”,打开“段落”对话框;单击“缩进和间距”选项卡,将间距的“段前”和“段后”都调整为“0行”;将“如果…...
直播预告 | YashanDB 2023年度发布会正式定档11月2日,邀您共同见证国产数据库发展实践!
11月2日,YashanDB 2023年度发布会将于云端直播开启,发布会以 「惟实励新」 为主题,邀请企业用户、合作伙伴、广大开发者共同见证全新产品与解决方案。届时发布会将在墨天轮社区同步进行,欢迎大家报名! 惟实求真。Yasha…...
一文读懂WebClient和RestTemplate的差异
自 Spring 5 以来,WebClient已成为Spring WebFlux的一部分,并且是发出 HTTP 请求的首选方式。它是经典RestTemplate的首选替代方案,后者自 Spring 5.0 以来一直处于维护模式。 本文将讨论 Spring WebClient和RestTemplate类之间的主要区别。…...
如何使用SpringBoot处理全局异常
如何使用SpringBoot处理全局异常 使用ControllerAdvice 和 ExceptionHandler处理全局异常 参考: ControllerAdvice ResponseBody Slf4j public class ExceptionHandler {ResponseStatus(HttpStatus.OK)org.springframework.web.bind.annotation.ExceptionHandler…...
【2023CANN训练营第二季】——通过一份入门级算子开发代码了解Ascend C算子开发流程
本次博客讲解的代码是Gitee代码仓的Ascend C加法算子开发代码,代码地址为: quick-start 打开Add文件,可以看到文件结构如下: 其中add_custom.cpp是算子开发的核心文件,包括了核函数的实现,展示了如何在Asc…...
建模仿真软件 Comsol Multiphysics mac中文版软件介绍
COMSOL Multiphysics mac是一款全球通用的基于高级数值方法和模拟物理场问题的通用软件,拥有、网格划分、研究和优化、求解器、可视化和后处理、仿真 App等相关功能,轻松实现各个环节的流畅进行,它能够解释耦合或多物理现象。 附加产品扩展了…...
深入理解强化学习——强化学习的历史:近代强化学习的发展
分类目录:《深入理解强化学习》总目录 在《深入理解强化学习——强化学习的历史》前面的文章中我们讨论了最优控制和试错学习学习的思想,接下来,我们将讨论一些在20世纪60年代和70年代,在试错学习计算和理论研究被相对忽视的时候&…...
移动端ViT新利器!苹果提出稀疏专家混合模型Mobile V-MoEs
文章链接:https://arxiv.org/abs/2309.04354 最近,专家混合模型MoE受到了学术界和工业界的广泛关注,其能够对任意输入来激活模型参数中的一小部分来将模型大小与推理效率分离,从而实现模型的轻量化设计。目前MoE已经在自然语言处理…...
【linux系统】服务器安装Pycharm
文章目录 安装pycharm步骤1. 进入pycharm官网2. 上传到服务器3. 安装过程 摘要:pycharm是Python语言的图形化开发工具。因为如果在Linux环境下的Python shell 中直接进行编程,其无法保存与修改,在大型项目当中这是很不方便的,而py…...
生信小白也能搞定的实验室内部工具:手把手教你用SequenceServer+Docker搭建专属BLAST查询网站
生物信息学零基础实战:用SequenceServer与Docker构建实验室专属BLAST平台 当实验室积累的基因序列数据越来越多,每次都要上传到NCBI进行BLAST比对既费时又存在数据安全风险。有没有一种方法,能让团队成员像使用百度搜索一样简单地在内部查询这…...
Awoo Installer:破解Switch游戏安装限制的高性能解决方案
Awoo Installer:破解Switch游戏安装限制的高性能解决方案 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Installer是一款专为破解…...
Phi-4-mini-reasoning保姆级教学:Windows WSL2环境部署全流程
Phi-4-mini-reasoning保姆级教学:Windows WSL2环境部署全流程 1. 模型介绍 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型,专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个模型主打"小参数、强推理、长上下文、低延迟"的…...
终极Windows驱动管理指南:如何用DriverStore Explorer快速释放30GB磁盘空间
终极Windows驱动管理指南:如何用DriverStore Explorer快速释放30GB磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer DriverStore Explorer(简称RAPR&…...
别再被 CAD+GIS 折腾到崩溃!这款插件让你效率翻 10 倍,一键搞定所有地理信息处理
做测绘、规划、市政设计的你,是不是每天都在被这些问题折磨?CAD 里画好图,切到 GIS 软件导数据,反复切换动辄半小时;加载大型影像文件卡到死机,属性表管理杂乱无章;想把 GIS 属性标到图纸上&…...
中国四大高考工厂是哪四所
根据当前(2026年4月)可查的权威公开资料,“中国四大高考工厂”通常指以下四所中学: 1、河北衡水中学 2、安徽毛坦厂中学 3、河南郸城一高(即郸城县第一高级中学) 4、湖北黄冈中学 背…...
HagiCode Soul 平台技术解析:从需求萌发到独立平台的演进之路
先回顾:三次握手(建立连接)核心流程(实际版) 为了让挥手流程衔接更顺畅,咱们先快速回顾三次握手的实际核心,避免上下文脱节: 第一步(客户端→服务器)…...
手机号查QQ号终极指南:3分钟快速找回遗忘的QQ号码
手机号查QQ号终极指南:3分钟快速找回遗忘的QQ号码 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾因忘记QQ号而无法登录?是否因为更换手机需要重新绑定QQ却找不到账号信息?手机号查QQ号工…...
合规刚需下,游戏行业适合的内网通讯软件怎么选
一、背景 2026年,游戏行业在合规监管、信创推进与降本增效三重驱动下,内部协作与数据安全需求持续升级。《数据安全法》《网络安全法》对游戏企业研发代码、运营数据、用户信息的存储与传输提出明确合规要求,数据泄露、权限失控、协作低效等…...
Wan2.1 VAE与MySQL联动:构建带用户历史记录的图像生成平台
Wan2.1 VAE与MySQL联动:构建带用户历史记录的图像生成平台 你有没有想过,自己用AI生成的每一张图片,都能被自动保存下来,形成一个专属的创意作品集?今天,我们就来动手搭建一个这样的平台。它不仅能让你用W…...
