加入hutool依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.1</version>
</dependency>
案例
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Data
public class Student_add {
private Integer id;
private String userName;
private String sex;
private String school;
private String departments;
private String professional;
private String phone;
public static void main(String[] args) {
Student student = new Student();
student.setId(100);
student.setUserName("唐");
student.setSex("男");
student.setSchool("school");
student.setDepartments("departments");
student.setProfessional("professional");
student.setPhone("13000000000" );
Student_add sStudent_add = new Student_add();
sStudent_add.setUserName("张");
sStudent_add.setSex("男");
sStudent_add.setSchool("school");
sStudent_add.setDepartments("departments");
sStudent_add.setProfessional("professional");
sStudent_add.setPhone("13000000000" );
student.copy(sStudent_add);
}
}
控制台
实践
import java.io.Serializable;
import java.util.Date;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 资讯
* @Date: 2020-11-27
* @Version: V1.0
*/
@Data
@TableName("cc_information")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="cc_information对象", description="资讯")
public class CcInformation implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private Date updateTime;
/**标题*/
@Excel(name = "标题", width = 15)
@ApiModelProperty(value = "标题")
private String title;
/**所属栏目[数据字典]*/
@Excel(name = "所属栏目[数据字典]", width = 15)
@ApiModelProperty(value = "所属栏目[数据字典]")
private String beColumn;
/**内容*/
@Excel(name = "内容", width = 15)
@ApiModelProperty(value = "内容")
private String content;
/**图片*/
@Excel(name = "图片", width = 15)
@ApiModelProperty(value = "图片")
private String picture;
/**排序*/
@Excel(name = "排序", width = 15)
@ApiModelProperty(value = "排序")
private Integer sorting;
/**状态 1.正常 0.删除*/
@Excel(name = "状态 1.正常 0.删除", width = 15)
@ApiModelProperty(value = "状态 1.正常 0.删除")
private Integer status;
public void copy(CcInformation source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
}
/**
* 编辑
*
* @param ccInformation
* @return
*/
@AutoLog(value = "资讯-编辑")
@ApiOperation(value="资讯-编辑", notes="资讯-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@RequestBody CcInformation ccInformation) {
CcInformation findInformation = ccInformationService.getById(ccInformation.getId());
if(findInformation == null) {
return Result.error("未找到对应数据");
}
findInformation.copy(ccInformation);
findInformation.setUpdateBy(SecurityUtils.getUsername());
findInformation.setUpdateTime(new Date());
ccInformationService.updateById(ccInformation);
return Result.OK("编辑成功!");
}
说明
适合update方法,当前端需要修改的参数不固定,Student_add 类里,我们可以都写上,当前端业务发生变化,需要调整修改参数,后端不需要修改代码,只需要前端添加参数
BeanUtils.copyProperties
Convert.convert
实现类转换时会全部复制参数,不适合修改方法,当复制的二个类为同一实体类时
可以看到,复制前参数也被修改了,Convert只是负责类型转换,当目标类型和原类型一致的时候,会直接返回
效率
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.convert.Convert;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Data
public class Student {
private Integer id;
private String userName;
private String sex;
private String school;
private String departments;
private String professional;
private String phone;
public void copy(Student source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
public void copy(Student_add source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}
public static void main(String[] args){
Integer number = 50000;
List<Student> studentList = new ArrayList<>();
Student copy_student = new Student();
Student student = new Student();
student.setUserName("张");
student.setSex("男");
student.setSchool("school");
student.setDepartments("departments");
student.setProfessional("professional");
student.setPhone("13000000000" );
Long startTime = 0L;
Long endTime = 0L;
//set
studentList = new ArrayList<>();
startTime = System.currentTimeMillis();
for (int i = 0; i < number; i++) {
copy_student = new Student();
copy_student.setId(i);
copy_student.setUserName(student.getUserName());
copy_student.setSex(student.getSex());
copy_student.setSchool(student.getSchool());
copy_student.setDepartments(student.getDepartments());
copy_student.setProfessional(student.getProfessional());
copy_student.setPhone(student.getPhone());
studentList.add(copy_student);
}
endTime = System.currentTimeMillis();
log.info("set 耗时>>>>>>>>>>>>>>>>>>>: " + (endTime - startTime) + "ms.");
//BeanUtil.copyProperties
studentList = new ArrayList<>();
startTime = System.currentTimeMillis();
for (int i = 0; i < number; i++) {
copy_student = new Student();
copy_student.setId(i);
copy_student.copy(student);
studentList.add(copy_student);
}
endTime = System.currentTimeMillis();
log.info("BeanUtil.copyProperties 耗时>>>>>>>>>>>>>>>>>>>: " + (endTime - startTime) + "ms.");
//spring
studentList = new ArrayList<>();
startTime = System.currentTimeMillis();
for (int i = 0; i < number; i++) {
copy_student = new Student();
copy_student.setId(i);
BeanUtils.copyProperties(copy_student, student);
studentList.add(copy_student);
}
endTime = System.currentTimeMillis();
log.info("spring 耗时>>>>>>>>>>>>>>>>>>>: " + (endTime - startTime) + "ms.");
// Convert.convert
studentList = new ArrayList<>();
startTime = System.currentTimeMillis();
for (int i = 0; i < number; i++) {
copy_student = Convert.convert(Student.class, student);
copy_student.setId(i);
studentList.add(copy_student);
}
endTime = System.currentTimeMillis();
log.info("Convert.convert 耗时>>>>>>>>>>>>>>>>>>>: " + (endTime - startTime) + "ms.");
}
}
17:32:28.216 [main] INFO org.jeecg.modules.cc.entity.Student - set 耗时>>>>>>>>>>>>>>>>>>>: 14ms.
17:32:28.590 [main] INFO org.jeecg.modules.cc.entity.Student - BeanUtil.copyProperties 耗时>>>>>>>>>>>>>>>>>>>: 371ms.
17:32:28.889 [main] INFO org.jeecg.modules.cc.entity.Student - spring 耗时>>>>>>>>>>>>>>>>>>>: 299ms.
17:32:28.900 [main] INFO org.jeecg.modules.cc.entity.Student - Convert.convert 耗时>>>>>>>>>>>>>>>>>>>: 11ms.