前言
BeanUtil.copyProperties
MapStruct
一、为什么用MapStruct?
实体类类copy效率对比
官方:20倍
实测:30左右倍
二、使用步骤
1.引入库
代码如下(示例):
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.2.0.Beta2</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.2.0.Beta2</version>
</dependency>
2.读入数据
源dto代码如下(示例):
package study;
import lombok.Data;
import java.util.Date;
/**
* @program: ruoyi
* @description:
* @author: yangyang
* @create: 2023-10-27 15:22
**/
@Data
public class UserPo {
private Long id;
private String name;
private Date createTime;
private String userNick;
}
目标dto代码如下(示例):
import lombok.Data;
import java.util.Date;
/**
* @program: ruoyi
* @description:
* @author: yangyang
* @create: 2023-10-27 15:22
**/
@Data
public class UserEntity {
private Long id;
private String name;
@Alias("createTime")
private Date createTime1;
@Alias("userNick")
private String userNick1;
}
Convent转换器 代码如下(示例):
package study;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
/**
* @program: ruoyi
* @description:
* @author: yangyang
* @create: 2023-10-27 15:23
**/
@Mapper(componentModel = "spring")
public interface PersonConvent {
PersonConvent INSTANCT = Mappers.getMapper(PersonConvent.class);
// @Mapping(target = "userNick1", source = "userNick")
@Mappings({
@Mapping(source = "userNick", target = "userNick1"),
@Mapping(source = "createTime", target = "createTime1")
})
UserEntity to(UserPo userPo);
}
测试类代码如下(示例):
package study;
import cn.hutool.core.bean.BeanUtil;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import java.util.Date;
/**
* @program: ruoyi
* @description:
* @author: yangyang
* @create: 2023-10-27 15:25
**/
@Slf4j
public class MapStructTest {
@Test
public void MapStructTest() {
UserPo userPo = new UserPo();
userPo.setId(1L);
userPo.setName("tt");
userPo.setCreateTime(new Date());
userPo.setUserNick("测试mapstruct");
UserEntity userEntity = new UserEntity();
long startTime = System.currentTimeMillis();
BeanUtil.copyProperties(userPo, userEntity);
long endTime = System.currentTimeMillis();
long elapsedTime = endTime - startTime;
log.info("BeanUtil耗时:{}", elapsedTime);
long startTime1 = System.currentTimeMillis();
UserEntity user = PersonConvent.INSTANCT.to(userPo);
long endTime1 = System.currentTimeMillis();
long elapsedTime1 = endTime1 - startTime1;
log.info("MapStruct耗时:{}", elapsedTime1);
System.err.println("BeanUtil转换:" + userEntity);
System.err.println("MapStruct转换" + user);
}
}