前言

ModelMapper 是一个 Object To Object 的工具,类似于 MapStruct又不同于 MapStruct。主要原因是 ModelMapper 是利用反射的原理实现的 Object To Object。

ModelMapper 官方API : http://modelmapper.org/user-manual/property-mapping/

使用场景

前端传递的参数分属于多个po实体,用ModelMapper来处理前端传递过来的实体到对应的po实体中。

ModelMapperSingle工具类

import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;public class ModelMapperSingle {protected final static ModelMapper modelMapper = new ModelMapper();private final static ModelMapperSingle modelMapperSingle = new ModelMapperSingle();static {modelMapper.getConfiguration().setFullTypeMatchingRequired(true);modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);}public static ModelMapper Instance() {return modelMapperSingle.modelMapper;}
}

参数接收实体

@Data
public class ProductRequestVM extends BaseVM {//商品IDprivate Long productId;//商品名称@NotBlankprivate String productName;//商品分类ID@NotNullprivate Long categoryId;//一级商品分类IDprivate Long rootCategoryId;//销量private Integer soldNum;//商品内容private String content;//商品参数IDprivate Long paramId;//产地private String productPlace;//保质期private String footPeriod;//品牌名private String brand;//生产厂名private String factoryName;//生产厂址private String factoryAddress;//包装方式private String packagingMethod;//规格重量private String weight;//存储方式private String storageMethod;//食用方式private String eatMethod;
}
import com.bw.note.util.ModelMapperSingle;
import org.modelmapper.ModelMapper;public class BaseVM {protected static ModelMapper modelMapper = ModelMapperSingle.Instance();public static ModelMapper getModelMapper() {return modelMapper;}public static void setModelMapper(ModelMapper modelMapper) {BaseVM.modelMapper = modelMapper;}
}

po实体

import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;@Data
@TableName("PRODUCT")
public class Product extends Model<Product> {@ApiModelProperty(value = "序号")@TableId(value = "PRODUCT_ID", type = IdType.AUTO)private Long productId;@NotBlank(message = "商品名称不能为空")@ApiModelProperty(value = "商品名称")@TableId("PRODUCT_NAME")private String productName;@NotNull(message = "商品分类ID不能为空")@ApiModelProperty(value = "商品分类ID")@TableId("CATEGORY_ID")private Long categoryId;@NotNull(message = "一级分类外键ID不能为空")@ApiModelProperty(value = "一级分类外键id 一级分类id,用于优化查询")@TableId("ROOT_CATEGORY_ID")private Long rootCategoryId;@ApiModelProperty(value = "销量 累计销售")@TableId("SOLD_NUM")private Integer soldNum;@ApiModelProperty(value = "默认是1,表示正常状态, -1表示删除, 0下架 默认是1,表示正常状态, -1表示删除, 0下架")@TableId("PRODUCT_STATUS")private Integer productStatus;@ApiModelProperty(value = "商品内容")@TableId("CONTENT")private String content;@ApiModelProperty(value = "创建时间",hidden = true)@TableField(value = "CREATE_TIME",fill = FieldFill.INSERT)@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date createTime;@ApiModelProperty(value = "更新时间",hidden = true)@TableField(value = "UPDATE_TIME",fill = FieldFill.UPDATE)@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date updateTime;@Overrideprotected Serializable pkVal() {return null;}
}
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;@Data
@TableName("PRODUCT_PARAMS")
public class ProductParams extends Model<ProductParams> {@ApiModelProperty(value = "商品参数id")@TableId(value = "PARAM_ID", type = IdType.AUTO)private Long paramId;@NotNull(message = "商品id不能为空")@ApiModelProperty(value = "商品id")@TableId(value = "PRODUCT_ID")private Long productId;@ApiModelProperty(value = "产地")@TableId(value = "PRODUCT_PLACE")private String productPlace;@ApiModelProperty(value = "保质期,例:180天")@TableId(value = "FOOT_PERIOD")private String footPeriod;@ApiModelProperty(value = "品牌名")@TableId(value = "BRAND")private String brand;@ApiModelProperty(value = "生产厂名")@TableId(value = "FACTORY_NAME")private String factoryName;@ApiModelProperty(value = "生产厂址")@TableId(value = "FACTORY_ADDRESS")private String factoryAddress;@ApiModelProperty(value = "包装方式,例:袋装")@TableId(value = "PACKAGING_METHOD")private String packagingMethod;@ApiModelProperty(value = "规格重量,例:35g")@TableId(value = "WEIGHT")private String weight;@ApiModelProperty(value = "存储方法,例:常温5~25°")@TableId(value = "STORAGE_METHOD")private String storageMethod;@ApiModelProperty(value = "食用方式,例:开袋即食")@TableId(value = "EAT_METHOD")private String eatMethod;@ApiModelProperty(value = "创建时间",hidden = true)@TableField(value = "CREATE_TIME",fill = FieldFill.INSERT)@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date createTime;@ApiModelProperty(value = "更新时间",hidden = true)@TableField(value = "UPDATE_TIME",fill = FieldFill.UPDATE)@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date updateTime;@Overrideprotected Serializable pkVal() {return null;}
}

实际应用

protected final static ModelMapper modelMapper = ModelMapperSingle.Instance();public Product saveOrUpdateProduct(ProductRequestVM model) {Product product = modelMapper.map(model, Product.class);
}

【ModelMapper简单使用】相关推荐

  1. modelMapper.map的一个使用例子

    先上modelMapper.map的中文翻译:(百度自动翻译) 应用通常由相似但不同的对象模型组成,其中两个模型中的数据可能相似,但模型的结构和关注点不同.对象映射使将一个模型转换为另一个模型变得容易 ...

  2. SpringBoot项目中ModelMapper配置以及使用

    项目中对象与对象赋值转换使用的频率非常的高,比如数据库表实体对象(Entity)与业务类对象(Model)之间的赋值传递,或者模型对象(Model)与视图对象(ViewModel)之间的赋值传递.如果 ...

  3. ModelMapper

    在项目中很多时候需要把Model和DTO两个模型类来回转换,保证Model对外是隐私的,同时类似密码之类的属性也能很好地避免暴露在外了. 那么ModelMapper就是为了方便转换而实现的一个类库,下 ...

  4. 使用ModelMapper的一次踩坑经历

    在实际项目中,我们常常需要把两个相似的对象相互转换,其目的是在对外提供数据时需要将一部分敏感数据(例如:密码.加密token等)隐藏起来.最普通的方法是,新建一个对象,将需要的值逐个set进去.如果有 ...

  5. ModelMapper 一文读懂

    目录 1.ModelMapper简介 1.1 引入ModelMapper 的依赖 1.2 进行Mapping映射 1.3 ModelMapper 工作原理 2.ModelMapper 基础操作 2.1 ...

  6. 在docker上安装部署tomcat项目 超简单,拿来主义

    在docker中部署tomcat,非常简单,而且省去了手动安装jdk等步骤,只需要将war包复制在容器tomcat实例中的webapps下面即可.以下将详细讲解流程: 在windows中打好包以后用w ...

  7. Linux下tomcat的安装与卸载以及配置(超简单)

    无敌简单的几步 1.安装 //首先你需要下载好tomcat包 sudo tar -xvzf apache-tomcat-7.0.85.tar.gz(这里是包名) -C 你要放的位置 2.卸载 rm - ...

  8. Docker安装Apache与运行简单的web服务——httpd helloworld

    Docker运行简单的web服务--httpd helloworld目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker运行简单的web ...

  9. Docker的安装、镜像源更换与简单应用

    Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...

最新文章

  1. mysql中自己定义函数编程
  2. php mysql百万级数据_php+mysql百万级数据怎么排序_PHP教程
  3. 医院计算机管理在品管圈中的应用,品管圈在医院管理中怎么用?看完就明白了...
  4. iview this.$modal 关闭所有的弹窗_一看会用TOB弹窗应用场景
  5. 如何嗅闻交换网络和ARP骗子-ARP解释的原则
  6. 搭建php docker环境日记
  7. 物体检测方法总结(下)
  8. scala中的filter函数
  9. [Git] Squash all of my commits into a single one and merge into master
  10. 庖丁解牛 - 图解MySQL 8.0优化器查询解析篇
  11. 【侯捷】C++面向对象程序设计
  12. Alkyne-PEG-COOH 炔烃PEG羧基
  13. 绝对实践,教你如何成功修改捕鱼达人ipad版 金币
  14. 冬日里的小确幸无非是美味在旁
  15. LeetCode 1 Two Sum——在数组上遍历出花样
  16. IAR修改工程名方法
  17. 天邑ty1208z海思3798刷版本_陕西电信天邑ty1208z_s905m-b盒子刷安卓系统教程
  18. 新浪微博如何申请API
  19. 全球健身领导品牌莱美国际任命季嘉华为大中华区及韩国CEO
  20. 如何在Apple Watch上添加和更改世界时钟

热门文章

  1. elementUI el-upload传额外的参数
  2. 一首关于远方和理想的小诗
  3. Unity3D网络游戏0.2
  4. QQ浏览器x5内核的兼容性问题
  5. html的后代选择器,html5怎么使用后代选择器?html选择后代的两种方式详解!
  6. 【中级计量经济学】Lecture 2 多重共线性
  7. 数据分析的三大时间轴:过去、现在和未来(转发有福利哦)
  8. 拼多多的“最初一公里”战事
  9. 15.9 文本查询程序再探(继承)
  10. webgis中的比例尺实现