zoukankan      html  css  js  c++  java
  • dozer(对象转换工具)

    1.概述 

    即在JavaBean到JavaBean之间进行递归数据复制,并且这些JavaBean可以是不同的复杂的类型。Dozer把对象中名称相同的属性进行复制,对于名称不相同或类型不一样,则可以在xml中进行定义。

    其最大的优势在于对象中不同的名称之前只要配置了映射,就可以进行复制,减少大量使用get和set方法。而BeanUtils.copyProperties只能复制对象中名称且类型相同的属性。

    2.实战演练

    2.1环境准备

    新建一个SpringBoot的项目,导入需要的依赖

    <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
    </dependency>
     <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    2.2引入dozer

    1)导入依赖

    <dependency>
        <groupId>com.github.dozermapper</groupId>
        <artifactId>dozer-spring-boot-starter</artifactId>
        <version>6.5.2</version>
    </dependency>

    2)创建对象UserDto,作为源对象

    @Data
    public class UserDto {
    
        private Integer userId;
    
        private String userName;
    
        private String address;
    
        private Integer age;
    
        private String birthday;
    }

    3)创建对象UserEntity,作为目标对象

    @Data
    public class UserEntity {
    
        private Integer id;
    
        private String name;
    
        private String addr;
    
        private Integer age;
    
        private Date birthday;
    }

    4)创建dozer全局的配置文件

    在资源目录下新建dozer目录,新建文件dozer-config.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://dozermapper.github.io/schema/bean-mapping"
           xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping
                               http://dozermapper.github.io/schema/bean-mapping.xsd">
    
        <!--全局配置-->
        <configuration>
            <date-format>yyyy-MM-dd</date-format>
        </configuration>
    </mappings>

    5)创建对象映射文件。在dozer中新建user.dozer.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns="http://dozermapper.github.io/schema/bean-mapping"
              xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping
                               http://dozermapper.github.io/schema/bean-mapping.xsd">
    
        <!--配置对象中属性的对应关系,相同的属性无需映射-->
       <mapping date-format="yyyy-MM-dd">
           <class-a>com.zys.example.entity.UserEntity</class-a>
           <class-b>com.zys.example.entity.UserDto</class-b>
           <field>
               <a>id</a>
               <b>userId</b>
           </field>
           <field>
               <a>name</a>
               <b>userName</b>
           </field>
           <field>
               <a>addr</a>
               <b>address</b>
           </field>
       </mapping>
    </mappings>

    6)新建接口UserController。由于需要Spring管理,直接使用controller进行测试:

    package com.zys.example.controller;
    
    import com.github.dozermapper.core.Mapper;
    import com.zys.example.entity.UserDto;
    import com.zys.example.entity.UserEntity;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/user")
    public class UserController1 {
    
        @Autowired
        private Mapper mapper;
    
        @GetMapping("/send")
        public UserEntity sendMsg(Integer id, String msg) {
            UserDto userDto = new UserDto();
            userDto.setUserId(123);
            userDto.setUserName("admin");
            userDto.setAddress("武汉");
            userDto.setAge(20);
            userDto.setBirthday("2001-12-15");
            UserEntity user = mapper.map(userDto, UserEntity.class);
            return user;
        }
    }

    7)测试。启动项目,输入http://localhost:8080/user/send,即可看到返回的值,说明这两个对象转换成功。

    就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
  • 相关阅读:
    [一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理 OnActionExecuting内如何获取参数
    携程SQL面试题忘大牛解答解决思路
    一些.Net面试题 (BS 方向)
    关于SQL SERVER高并发解决方案
    锁sql server锁
    MSSQL WITH (NOLOCK) 脏读
    python dict的函数
    conda常用命令
    sess.run() 中的fetches和feed_dict
    Tensorflow检验GPU是否安装成功 及 使用GPU训练注意事项
  • 原文地址:https://www.cnblogs.com/zys2019/p/14974592.html
Copyright © 2011-2022 走看看