对象属性值copy-Mapstruct

来源:互联网 发布:服务器端口检测工具 编辑:程序博客网 时间:2024/06/06 17:15

       在许多项目中都会设计实体对象的转换拷贝,如果字段比较多使用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;}@Overridepublic 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 */@Testpublic 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

原创粉丝点击