对象属性值copy-Mapstruct

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

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

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

<properties>
		<m2e.apt.activation>jdt_apt</m2e.apt.activation>
</properties>
引用它之后在编译时就会自动生成实现类了!!

    然后添加pom依赖

<dependency>  
     <groupId>org.mapstruct</groupId>  
     <artifactId>mapstruct-jdk8</artifactId>  
     <version>1.1.0.Final</version>  
 </dependency>  
  
 <dependency>  
     <groupId>org.mapstruct</groupId>  
     <artifactId>mapstruct-processor</artifactId>  
     <version>1.1.0.Final</version>  
     <scope>provided</scope>  
 </dependency>  
创建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("sb110@xzs.cn");
		from.setAge(23);
		ObjTo to= ObjMapper .INSTANCE.carToCarDto(from);
		System.out.println(to.toString());
	}
代码地址:https://github.com/xuzhengshun/ObjConvert

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值