对象属性值copy-Mapstruct

       在许多项目中都会设计实体对象的转换拷贝,如果字段比较多使用set和get会使代码显得比较臃肿,然而大部分工具类比如:

BeanUtils.copyProperties(user, uForm) 等使用反射原理会大大的影响性能。Mapstruct就很好的解决了性能问题,它的原理就是自动帮我们封装get,set方法。

     由于本人使用的是Eclipse,在网上看到许多前辈说eclipse 不会自动生成转换接口mapper的实现类(好像idea会)。所以第一步需要在pom文件中添加


		jdt_apt
引用它之后在编译时就会自动生成实现类了!!

    然后添加pom依赖

  
     org.mapstruct  
     mapstruct-jdk8  
     1.1.0.Final  
   
  
   
     org.mapstruct  
     mapstruct-processor  
     1.1.0.Final  
     provided  
   
创建DO以及VO对象
package com.xzs.MapstructDemo;
/**
 * DO对象
 * @Description:TODO
 * @exception:
 * @author: 徐正顺
 * @time:2017年10月27日 下午5:32:27
 */
public class ObjFrom {


	private String name;
	private String eName;
	private String email;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String geteName() {
		return eName;
	}
	public void seteName(String eName) {
		this.eName = eName;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}
	package com.xzs.MapstructDemo;
/**
 * VO 对象
 * @Description:TODO
 * @exception:
 * @author: 徐正顺
 * @time:2017年10月27日 下午5:33:44
 */
public class ObjTo {


	private String myname;
	private String myEmail;
	private int age;
	
	public String getMyname() {
		return myname;
	}


	public void setMyname(String myname) {
		this.myname = myname;
	}


	public String getMyEmail() {
		return myEmail;
	}


	public void setMyEmail(String myEmail) {
		this.myEmail = myEmail;
	}


	public int getAge() {
		return age;
	}


	public void setAge(int age) {
		this.age = age;
	}


	@Override
	public String toString() {
		return "ObjTo [myname=" + myname + ", myEmail=" + myEmail + ", age=" + age + "]";
	}
	
}
package com.xzs.MapstructDemo;


import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
/**
 * 对象属性值copy mapper
 * @Description:TODO
 * @exception:
 * @author: 徐正顺
 * @time:2017年10月27日 下午5:34:55
 */
public interface ObjMapper {
	ObjMapper INSTANCE = Mappers.getMapper( ObjMapper.class );   
	   
	   /**
	    * ObjFrom 自动转换为 ObjTo
	    * @Description:TODO
	    * @param from
	    * @return
	    * ObjTo
	    * @exception:
	    * @author: 徐正顺
	    * @time:2017年10月27日 下午3:29:44
	    * 
	    * 使用@Mapping 可以指定不同字段名间的转换(类型必须相同)
	    * source = "eName" ObjFrom的eName属性值copy到ObjTo的myname值 target = "myname"
	    */
	    @Mapping(source = "eName", target = "myname") 
	    @Mapping(source = "email", target = "myEmail") 
	    ObjTo carToCarDto(ObjFrom from);   
}
       /** 测试方法
	 * Mapstruct 对象属性值copy
	 * @Description:TODO
	 * void
	 * @exception:
	 * @author: 徐正顺
	 * @time:2017年10月27日 下午3:38:46
	 */
	@Test
	public void contextLoads() {
		ObjFrom from =new ObjFrom();
		from.seteName("哼哈");
		from.seteName("HenHa");
		from.setEmail("[email protected]");
		from.setAge(23);
		ObjTo to= ObjMapper .INSTANCE.carToCarDto(from);
		System.out.println(to.toString());
	}
代码地址:https://github.com/xuzhengshun/ObjConvert

你可能感兴趣的:(Demo玩玩)