oracle 复制工具类,最牛逼(没有之一)的bean拷贝工具类-map-struct

平时开发中常用bean复制的工具类,基本都用到了反射,性能始终差强人意。

但是我们都是懒人,让我手写get set把一个对象完美赋值给另一个对象,那实在是太难为我了。

大杀器来了 mapstruct。

先上结论,原理是通过自动代码生成,根据生成的接口,自动帮你写出类属性复制的代码。

接口定义如下

/**

* 所用到的实体类A

*/

@NoArgsConstructor

@AllArgsConstructor

@Data

@Builder

@FieldDefaults(level = AccessLevel.PRIVATE) //这个注解可以给属性自动加上private

public class CateSelector {

/**

* 行业id

*/

List industryIds;

/**

* 一级类目id

*/

List cateLevel1Ids;

/**

* 2级类目id

*/

List cateLevel2Ids;

/**

* 3级类目id

*/

List cateLevel3Ids;

/**

* 4级类目id

*/

List cateLevel4Ids;

/**

* 5级类目id

*/

List cateLevel5Ids;

/**

* 叶子类目id

*/

List cateIds;

}

这是转换的目标类 dto

/**

* @author qingshu

*/

@NoArgsConstructor

@AllArgsConstructor

@Data

@Builder

@FieldDefaults(level = AccessLevel.PRIVATE)

public class CateSelectorDTO implements Serializable {

/**

* 行业id

*/

List industryIds;

/**

* 一级类目id

*/

List cateLevel1Ids;

/**

* 2级类目id

*/

List cateLevel2Ids;

/**

* 3级类目id

*/

List cateLevel3Ids;

/**

* 4级类目id

*/

List cateLevel4Ids;

/**

* 5级类目id

*/

List cateLevel5Ids;

/**

* 叶子类目id

*/

List cateIds;

}

重头戏来了,这是我们要写的转换工具类

/**

* @author qingshu

*/

@Mapper

public interface CateConvert {

CateConvert INSTANCE = Mappers.getMapper(CateConvert.class);

/**

* 转换 CateSelectorDTO->CateSelector

*/

CateSelector toSelector(CateSelectorDTO dto);

/**

* 转换 CateSelector->CateSelectorDTO

*/

CateSelectorDTO toDTO(CateSelector selector);

}

灰常的简单,只是一个接口,使用的时候直接

CateConvert.INSTANCE.toSelector()

静态方法,安全无害。

更牛逼的是,使用的是自动代码生成,下面是生成出来的方法。

@Generated(

value = "org.mapstruct.ap.MappingProcessor",

date = "2020-07-20T16:41:41+0800",

comments = "version: 1.3.1.Final, compiler: javac, environment: Java 1.8.0_231 (Oracle Corporation)"

)

public class CateConvertImpl implements CateConvert {

@Override

public CateSelector toSelector(CateSelectorDTO dto) {

if ( dto == null ) {

return null;

}

CateSelectorBuilder cateSelector = CateSelector.builder();

List list = dto.getIndustryIds();

if ( list != null ) {

cateSelector.industryIds( new ArrayList( list ) );

}

List list1 = dto.getCateLevel1Ids();

if ( list1 != null ) {

cateSelector.cateLevel1Ids( new ArrayList( list1 ) );

}

List list2 = dto.getCateLevel2Ids();

if ( list2 != null ) {

cateSelector.cateLevel2Ids( new ArrayList( list2 ) );

}

List list3 = dto.getCateLevel3Ids();

if ( list3 != null ) {

cateSelector.cateLevel3Ids( new ArrayList( list3 ) );

}

List list4 = dto.getCateLevel4Ids();

if ( list4 != null ) {

cateSelector.cateLevel4Ids( new ArrayList( list4 ) );

}

List list5 = dto.getCateLevel5Ids();

if ( list5 != null ) {

cateSelector.cateLevel5Ids( new ArrayList( list5 ) );

}

List list6 = dto.getCateIds();

if ( list6 != null ) {

cateSelector.cateIds( new ArrayList( list6 ) );

}

return cateSelector.build();

}

@Override

public CateSelectorDTO toDTO(CateSelector selector) {

if ( selector == null ) {

return null;

}

CateSelectorDTOBuilder cateSelectorDTO = CateSelectorDTO.builder();

List list = selector.getIndustryIds();

if ( list != null ) {

cateSelectorDTO.industryIds( new ArrayList( list ) );

}

List list1 = selector.getCateLevel1Ids();

if ( list1 != null ) {

cateSelectorDTO.cateLevel1Ids( new ArrayList( list1 ) );

}

List list2 = selector.getCateLevel2Ids();

if ( list2 != null ) {

cateSelectorDTO.cateLevel2Ids( new ArrayList( list2 ) );

}

List list3 = selector.getCateLevel3Ids();

if ( list3 != null ) {

cateSelectorDTO.cateLevel3Ids( new ArrayList( list3 ) );

}

List list4 = selector.getCateLevel4Ids();

if ( list4 != null ) {

cateSelectorDTO.cateLevel4Ids( new ArrayList( list4 ) );

}

List list5 = selector.getCateLevel5Ids();

if ( list5 != null ) {

cateSelectorDTO.cateLevel5Ids( new ArrayList( list5 ) );

}

List list6 = selector.getCateIds();

if ( list6 != null ) {

cateSelectorDTO.cateIds( new ArrayList( list6 ) );

}

return cateSelectorDTO.build();

}

}

map-struce 里面可以自动解析各种类型,支持list,甚至支持循环嵌套对象,比如Tree 对象里有个 类型为 Tree 的属性,这种,也是支持的。

map-struce 强大 恐怖如斯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值