Java中升级属性复制转换功能

Java中升级属性复制转换功能_第1张图片

前言

        在java中,经常碰到bean之间的转换,诸如Entity转VO,Entity转DTO等等,这时,经常会碰到这样一种情况,VO和DTO里面有一个字段都是来源于Entity里面,但是属性名称和属性类型都不一样,虽然转换逻辑一致但是我们还是只能手动转换,这时如果我在代码中手动转换会出现很多多余的代码,而且出现其它Bean也需要转换时还需要连续复制这些代码,那么有什么好的办法来处理呢?

        答案肯定是有的,那么接下来我们就看看如何实现这种功能。

        例:有一个实体类User,里面有一个枚举字段sex,枚举:【0:女;1:男】

        现在有一个接口需要查询用户User的sex名称(需要返回男还是女,查询对象UserVO,字段sexFmt),这时常规下我们只能这样操作:

User user = userMapper.selectById(1L);
UserVO vo = new UserVO();
BeanUtils.copy(user, vo);
vo.setSexFmt(user.getSex()==0?"女":"男");

        看似问题似乎也不大,但是如果出现UserDTO和UserQuery等都需要这种操作时,上面的代码就显得比较多余了,那么接下来我们继续看看如何优雅的实现这些升级后的复制操作。

一、创建注解类及其接口

        1、创建转换接口

public interface BeanConverter {
    R convert(T t);
}

        2、创建注解类

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Convert {
    boolean ignore() default false;

    String ref() default "";

    Class converter() default BeanConverter.class;


}

二、int和boolean之间的转换实现接口

        1、int转boolean实现

public class IntegerToBooleanConverter implements BeanConverter {
    @Override
    public Boolean convert(Integer integer) {
        return integer != null && integer == 1;
    }
}

        2、boolean转int实现

public class BooleanToIntegerConverter implements BeanConverter {
    @Override
    public Integer convert(Boolean boo) {
        return boo != null && boo ? 1 : 0;
    }
}

三、转换工具类(核心)


你可能感兴趣的:(java,java,开发语言)