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

使用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

http://www.lryc.cn/news/208069.html

相关文章:

  • 一种基于屏幕分辨率的RTSP主子码流切换的多路视频监控的播放方案
  • SpringBoot日志+SpringMVC+UUID重命名文件+Idea热部署
  • 向日葵远程控制中的键盘异常问题
  • 【iOS免越狱】利用IOS自动化web-driver-agent_appium-实现自动点击+滑动屏幕
  • 聊聊“JVM 调优JVM 性能优化”是怎么个事?
  • 再获Gartner认可!持安科技获评ZTNA领域代表供应商
  • 微服务-Feign
  • jsp获取数据 jsp直接获取后端数据 获取input选中的值 单选 没 checked属性
  • React 中 keys 的作用是什么?
  • 代码随想录 | Day46
  • word行内插入mathtype 公式后行距变大解决办法
  • 直播预告 | YashanDB 2023年度发布会正式定档11月2日,邀您共同见证国产数据库发展实践!
  • 一文读懂WebClient和RestTemplate的差异
  • 如何使用SpringBoot处理全局异常
  • 【2023CANN训练营第二季】——通过一份入门级算子开发代码了解Ascend C算子开发流程
  • 建模仿真软件 Comsol Multiphysics mac中文版软件介绍
  • 深入理解强化学习——强化学习的历史:近代强化学习的发展
  • 移动端ViT新利器!苹果提出稀疏专家混合模型Mobile V-MoEs
  • 【linux系统】服务器安装Pycharm
  • 便利连锁:如何增加收益?教你一招轻松搞定!
  • STM32-程序占用内存大小计算
  • 鱼眼图像去畸变python / c++
  • 文心一言简单体验
  • css正确的语法
  • 【PG】PostgresSQL角色管理
  • 百度智能云获评Forrester中国市场人工智能/机器学习平台领导者
  • 基于java+swing+mysql实现的仓库商品管理系统
  • 深入理解Spring Boot AOP:CGLIB代理与JDK动态代理的完全指南
  • 【无标题】读书笔记之《智能化社会:未来人们如何生活、相爱和思考》
  • 华为云双十一服务器数据中心带宽全动态BGP和静态BGP区别