java实体转化&性能对比

阿里巴巴规范值得所有软件工程师参考 如不使用枚举 命名规范等

个人理解

DTO(Data Transfer Object) 数据传输对象 性别为0 1
VO(View Object) 显示层对象 性别为男 女
Query 数据查询对象 查询参数 性别为0 1 禁止使用Map
  1. 前端查询(Query) -> controller(把Query转为DTO) -> service(把DTO转为DO) -> dao查询DO
  2. dao查询DO -> service(把DO转为DTO) -> controller(把DTO转为VO) -> 返回前端

话不多说 如下为常用的几种实体转化工具及性能对比 更多细节&完整源码点击此处

操作类型 调用100万次 描述
get/set 18ms 手动调用
BeanCopiers 10ms 修改字节码
BeanUtils 2020ms 反射
Dozer 17729ms 反射
PropertyUtils 23715ms 反射
@SpringBootTest(classes = DozerApplication.class)
public class ConvertTest {
    @Test
    public void test() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        BeanCopier beanCopier = BeanCopier.create(User.class, UserDTO.class, false);
        Mapper mapper = DozerBeanMapperBuilder.buildDefault();

        User user = new User() {{
            setUserName("李磊");
            setPassword("密码");
        }};
        long number = 1000_1000;

        long begin = System.currentTimeMillis();
        for (long i = 0L; i < number; i++) {
            UserDTO userDTO = new UserDTO();
            userDTO.setUserName(user.getUserName());
            userDTO.setPassword(user.getPassword());
        }
        System.out.println(System.currentTimeMillis() - begin);

        begin = System.currentTimeMillis();
        for (long i = 0L; i < number; i++) {
            beanCopier.copy(user, new UserDTO(), null);
        }
        System.out.println(System.currentTimeMillis() - begin);

        begin = System.currentTimeMillis();
        for (long i = 0L; i < number; i++) {
            BeanUtils.copyProperties(user, new UserDTO());
        }
        System.out.println(System.currentTimeMillis() - begin);

        begin = System.currentTimeMillis();
        for (long i = 0L; i < number; i++) {
            mapper.map(user, UserDTO.class);
        }
        System.out.println(System.currentTimeMillis() - begin);

        begin = System.currentTimeMillis();
        for (long i = 0L; i < number; i++) {
            PropertyUtils.copyProperties(new UserDTO(), user);
        }
        System.out.println(System.currentTimeMillis() - begin);
    }
}
原创文章 157 获赞 113 访问量 7万+

猜你喜欢

转载自blog.csdn.net/setlilei/article/details/104859504