189 8069 5689

JAVABean对象转换工具-创新互联

在开发中有些规范,比如DTO、DO、VO等等,之间,如果我们需要转换,单纯的我们要一个一个的 set 值,真是一项苦B的活,在我以前接触的项目中发现很多代码是使用get/set来进行转换的,大量的这种冗余代码,看着头都大!!

专注于为中小企业提供网站制作、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业泾源免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

BeanUtils

java bean对象的相关转化,这里介绍两个 ,一个是大家都非常熟悉的 BeanUtils,还有一个就是平常在开发中经常使用的 MapStruct。

MapStruct 和 BeanUtils 最常用的莫过于对象的的拷贝了 。 不过面对需要深拷贝的对象大家要注意了,这里并不推荐大家使用BeanUtils工具去实现

@Test
	public void test01() {

		SysUser sysUser = new SysUser();
		sysUser.setUserId(1L);
		sysUser.setUserName("张三");
		sysUser.setCreateTime(new Date());

		User user = new User();

		BeanUtils.copyProperties(sysUser,user);
	}
MapStruct

下面重点说一下 MapStruct 这个转化,相对比的话BeanUtils 就是一个大老粗,只能同属性映射,或者在属性相同的情况下,允许被映射的对象属性少。

但当遇到被映射的属性数据类型被修改或者被映射的字段名被修改,则会导致映射失败。而 mapstruct 就是一个巧媳妇儿了。

她心思细腻,把我们可能会遇到的情况都给考虑到了(要是我也能找一个这样的媳妇儿该多好,内心笑出了猪声)

首先啥都不想果断导入Jar包
org.mapstructmapstruct-jdk81.2.0.Finalorg.mapstructmapstruct-processor1.2.0.Final
定义两个相同字段的对象
public class SysUser {

    private Long userId;

    private String account;

    忽略get、set....
}


public class User {
	
	private Long userId;
	
	private String account;

    忽略get、set....
}

接下来定义一个接口,但是注意不需要实现,他就呢能够帮我们转化很神奇的

//注意Mapper引入路径是:import org.mapstruct.Mapper;

@Mapper
public interface BeanConvert {

	BeanConvert COPY_PROPERTIES = Mappers.getMapper(BeanConvert.class);
	
	User sysUserDtoToUser(SysUser sysUser);

}
最后一步:在代码中调用,聪明的小伙伴看下面代码,一下就明白了,就是这么简单,搜易贼
@Test
	public void test01() {

		SysUser sysUser = new SysUser();
		sysUser.setUserId(1L);
		sysUser.setAccount("一个肥鲇鱼");

		User user = BeanConvert.COPY_PROPERTIES.sysUserDtoToUser(sysUser);

		System.out.println(user); // User{userId=1, account='一个肥鲇鱼'}
	}
两个对象字段不相同的情况

完全两个类字段相同的情况是很容易的,那么,更加令我们头疼的 有多个字段名字不同但是有对应关系应该怎么搞呢?

小栗子
public class SysUser {

    private Long userId;

    private String account;

    忽略get、set....
}


public class User {

	private Long userId;

	private String userName;

    忽略get、set....
}

将SysUser中account字段的值,赋值到User中userName

@Mapper
public interface BeanConvert {

	BeanConvert COPY_PROPERTIES = Mappers.getMapper(BeanConvert.class);

	@Mapping(source = "account", target = "userName")
	User sysUserDtoToUser(SysUser sysUser);


    // 多字段情况

    // @Mappings({
	// 		@Mapping(source = "userName", target = "account"),
	// 		@Mapping(source = "userId", target = "id"),
	// 		@Mapping(source = "createTime", target = "time")
	// })
}

@Test
	public void test01() {

		SysUser sysUser = new SysUser();
		sysUser.setUserId(1L);
		sysUser.setAccount("一个肥鲇鱼");

		User user = BeanConvert.COPY_PROPERTIES.sysUserDtoToUser(sysUser);

		System.out.println(user);// User{userId=1, userName='一个肥鲇鱼'}
	}

搞定,是不是很丝滑~

但是这么简单的两个小例子可包含不了 MapStruct这么强大的功能,不管是日期格式化、还是表达式解析、还是深拷贝,都能一一搞定。
抛砖引玉!
剩下的就交给聪明的小伙伴了!

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章名称:JAVABean对象转换工具-创新互联
标题路径:http://cdxtjz.cn/article/dijghp.html

其他资讯