南京市建设局网站栖霞,免费下载app软件下载安装到手机,网站开发前端框架,什么是自助网站mapstruct- 让VO#xff0c;DTO#xff0c;ENTITY转换更加便捷
1. 简介
MapStruct是一个代码生成器#xff0c;简化了不同的Java Bean之间映射的处理#xff0c;所谓映射指的就是从一个实体变化成一个实体。例如我们在实际开发中#xff0c;DAO层的实体和一些数据传输对…mapstruct- 让VODTOENTITY转换更加便捷
1. 简介
MapStruct是一个代码生成器简化了不同的Java Bean之间映射的处理所谓映射指的就是从一个实体变化成一个实体。例如我们在实际开发中DAO层的实体和一些数据传输对象(DTO)大部分属性都是相同的只有少部分的不同通过mapStruct可以让不同实体之间的转换变的简单。我们只需要按照约定的方式进行配置即可。
2. 使用背景
项目中有很多的VO和实体在进行各层之间数据传输的时候就需要不断进行转换之前手敲的getset非常的枯燥乏味且低效刚好遇到了这个工具。
使用mapstruct仅需要我们写一个interface接口使用Mapper标注并且提供一个静态的实例之后编写转换的方法方法的参数是转换的原类型方法的返回值是转换的目标类型。
3. 开发环境
mavenjdk1.8idea
4. pom
propertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetmapstruct.version1.4.2.Final/mapstruct.version
/properties
dependenciesdependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversionRELEASE/versionscopecompile/scope/dependencydependencygroupIdorg.mapstruct/groupIdartifactIdmapstruct/artifactIdversion${mapstruct.version}/version/dependencydependencygroupIdorg.mapstruct/groupIdartifactIdmapstruct-processor/artifactIdversion${mapstruct.version}/version/dependency
/dependencies注意 **pom文件中依赖的引入顺序为先引入lombok再引入mapstruct的依赖。**否则在mapstruct映射的时候转换的对象没有getset方法将会遇到很多问题 比如 Error:(15, 13) java: No property named “id“ exists in source parameter(s). Did you mean “null“? 比如生成的转换接口实现类中没有对应的getset无法转换
5. entity和VO
相互转换的类
package com.drc.mapstruct.vo;import lombok.Data;import java.util.Date;
Data
public class OrderVO {private String orderId;private String product;private String money;private Date date;
}package com.drc.mapstruct.entity;import lombok.Data;import java.util.Date;Data
public class OrderEntity {private Integer id;private String orderId;private String product;private String money;private Date date;private String userId;
}6. OrderConverter
需要定义的转换接口
package com.drc.mapstruct.converter;import com.drc.mapstruct.entity.OrderEntity;
import com.drc.mapstruct.vo.OrderVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;Mapper
public interface OrderConverter {OrderConverter INSTANCE Mappers.getMapper(OrderConverter.class);// 将实体类转换成VOOrderVO orderEntityToVO(OrderEntity orderEntity);// 将VO转换成实体类OrderEntity orderVOToEntity(OrderVO orderVO);
}
7. mvn compile
编译之后即可生成OrderConvert实现类实现类在target目录中实现类的具体代码可以在里面看到
我在网上查了下有说需要手工编译进入到pom所在的目录cmd中执行mvn compileidea不行
我这边两个都试了都OK的
8. 实现类
package com.drc.mapstruct.converter;import com.drc.mapstruct.entity.OrderEntity;
import com.drc.mapstruct.vo.OrderVO;
import javax.annotation.Generated;Generated(value org.mapstruct.ap.MappingProcessor,date 2023-02-15T17:10:280800,comments version: 1.4.2.Final, compiler: javac, environment: Java 1.8.0_301 (Oracle Corporation)
)
public class OrderConverterImpl implements OrderConverter {Overridepublic OrderVO orderEntityToVO(OrderEntity orderEntity) {if ( orderEntity null ) {return null;}OrderVO orderVO new OrderVO();orderVO.setOrderId( orderEntity.getOrderId() );orderVO.setProduct( orderEntity.getProduct() );orderVO.setMoney( orderEntity.getMoney() );orderVO.setDate( orderEntity.getDate() );return orderVO;}Overridepublic OrderEntity orderVOToEntity(OrderVO orderVO) {if ( orderVO null ) {return null;}OrderEntity orderEntity new OrderEntity();orderEntity.setOrderId( orderVO.getOrderId() );orderEntity.setProduct( orderVO.getProduct() );orderEntity.setMoney( orderVO.getMoney() );orderEntity.setDate( orderVO.getDate() );return orderEntity;}
}9. 使用
使用也很简单直接使用接口中定义的常量就能获得转换器对象之后调用方法就可以进行转换
简单示例
OrderConverter orderConverter OrderConverter.INSTANCE;
OrderEntity orderEntity new OrderEntity();
orderEntity.setId(1);
orderEntity.setOrderId(10001);
orderEntity.setDate(Date.from(Instant.now()));
orderEntity.setMoney(1000元);
orderEntity.setProduct(自行车);
orderEntity.setUserId(9999);
OrderVO orderVO orderConverter.orderEntityToVO(orderEntity);
System.out.println(orderVO);