【问题标题】:How to map POJO in to DTO, if fields are with different name如果字段名称不同,如何将 POJO 映射到 DTO
【发布时间】:2011-09-20 03:14:22
【问题描述】:

问题描述:

我有一个 POJO 对象,它是从数据库映射的。具有与数据库表中相同名称的属性(列)。但它需要一些更改,我将不得不使用 DTO。但问题是 DTO 具有数据库表中定义的不同名称的属性,(因此我将数据库表映射到 POJO,然后将 POJO 映射到 DTO)所以在映射时我必须使用字段和字段映射(POJO 的一个字段和 DTO 对象的一个​​字段),这将需要 50 行代码(数据库表有 50 列)。是否有任何解决方案可以使用 DTO 直接映射到我的 POJO?或者如果数据库表和 POJO/DTO 具有不同的列名,有没有办法将数据库表映射到 POJO/DTO?

例如

public class EmployeePOJO {

    String EMP_ID;
    String EMP_NAME;
    String EMP_SALERY;
    String EMP_DOB;
    String EMP_CONTACT_NO;
    String EMP_ADDRESS;
    String EMP_BLOOD_GROUP;
    String ASSIGNED_PROJECT;
    String PROJECT_MANAGER;
    String ROLE;

    //Getters and setters
}



public class EmployeeDTO {

    //String EMP_ID;
    //String EMP_NAME;
    String salery;            //EMP_SALERY;
    //String EMP_DOB;
    String phoneNumber;       //EMP_CONTACT_NO;
    String address;           //EMP_ADDRESS;
    //String EMP_BLOOD_GROUP;
    String currentProject;    //ASSIGNED_PROJECT;
    String projectManager;    //PROJECT_MANAGER;
    String role;              //ROLE;

    //getters and setters
}

【问题讨论】:

  • 为什么你的 pojo 中的字段名称都是大写的?这应该是驼峰式的。
  • 它不是真正的 POJO。我只是举个例子,并显示 POJO 的字段与数据库表列名相同。

标签: java mapping dto pojo apache-commons-beanutils


【解决方案1】:

http://sourceforge.net/projects/dozer/develop ? (不确定它是否符合您的需求,但看看) http://dozer.sourceforge.net/

【讨论】:

  • @Cris 这个否决票不是来自我身边的 Cris。如果答案对我有帮助,我肯定会投票。感谢您对我的问题投反对票。
  • 也许你不想使用它,但推土机可能会用于你所描述的。所以我真的很好奇我怎么能看到谁投票 - 并解释为什么
  • 这就像有人问起 ORM 并且用 EclipseLink 等 Hibernate m 的替代品做出回应的人被否决了......因为他们不想使用它
  • 虽然我真的不喜欢推土机,但它是一个可能的解决方案......为什么你说'这不是我想要的'?
  • @Cris 嘿,我正在尝试使用推土机。看来我会用它解决我的问题。实际上,在以前我使用 BeanUtils 并且我试图用同样的方法解决我的问题。但是在阅读了推土机的文档之后,我也和推土机在一起。
【解决方案2】:

ModelMapper 是另一个值得一试的库。它提供了一个流畅的 API 来映射属性,而不是使用字符串引用或 XML。

查看 ModelMapper 网站了解更多信息:

http://modelmapper.org

【讨论】:

    【解决方案3】:

    您可以添加@JsonProperty("salery") 用于映射字段顶部的EMP_SALERY 字段。 它使用import com.fasterxml.jackson.annotation.JsonProperty;的导入

    这在使用 ModelMapper 时对我有用。

    如果您再次担心反序列化,您有两个选择。

    @JsonProperty("EMP_SALERY")
        public byte getEMP_SALERY() {
        return red;
    }
    
    @JsonProperty("salery")
         public void setEMP_SALERY(byte red) {
         this.red = red;
    }
    

    另一种方法是使用别名

    @JsonAlias({"salery", "EMP_SALERY"})
    private String EMP_SALERY;
    

    【讨论】:

      【解决方案4】:

      我建议你试试JMapper Framework。 通过一些配置(带有注释或 xml),您就可以进行映射了

      【讨论】:

        猜你喜欢
        • 2012-04-02
        • 2021-04-16
        • 2021-12-08
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多