java - 转换java对象的框架

标签 java persistence dto

<分区>

我正在从事将数据库实体转换为 DTO 对象的项目。为此,每次转换都使用一个特殊的转换器类。


我正在提供我们正在做的事情的简化示例。为了代码清晰,我故意漏掉了 setter/getter 和其他一些东西。

所以这里是持久实体:

class Car {
    String number;
    Driver driver;
}

class Driver {
    String name;
    License license;
}

class License {
    String serial;
    Date expired;
} 

假设我们需要以下 DTO 对象:

class DriverDTO {
    String name;
    String carNumber;
    String licenseSerial;
}

我们创建以下转换器类:

class DriverDTOConverter {
    DriverDTO convert(Car car) {
        DriverDTO driverDto = new DriverDTO();
        driverDto.carNumber = car.number;
        driverDto.name = car.driver.name;
        driverDto.licenseSerial = car.driver.license.serial;
        return driverDto;
    }
}

还有一个更复杂的例子:

class CarDTO {
    String number;
    String driverName;
    LicenseDTO driverLicense;
}

class LicenseDTO {
    String serial;
}

class CarDTOConverter {
    CarDTO convert(Car car) {
        CarDTO carDto = new CarDTO();
        carDto.number = car.number;
        carDto.driverName = car.driver.name;
        LicenseDtoConverter c = new LicenseDtoConverter();
        carDto.driverLicense = c.convert(car.driver.license);
        return carDto;
    }
}

class LicenseDtoConverter {
    LicenseDTO convert(License license) {
        LicenseDTO licenseDto = new LicenseDTO();
        licenseDto.serial = license.serial;
        return licenseDto;
    }
}

这需要很多时间,所以我想知道是否有任何框架可以承担这项工作的责任。我只需要使用属性文件或注释对其进行配置。

就这样

如果由属性文件生成:

DriverDto <--> Car {
carNumber = number;
name = driver.name;            
licenseSerial = driver.license.serial;
}

CarDTO <--> Car {
number = number;
driverName = driver.name;
driverLicense = driver.license;
}

LicenseDTO <--> License {
license = license;
}

或可能的注释实体示例

@Converted(Car.class)
class DriverDTO {
    @Associated("driver.name")
    String name;
    @Associated("number")
    String carNumber;
    @Associated("driver.license.serial")
    String licenseSerial;
}

重要的要求是它不应该使用任何反射。所有注释或属性文件都应在编译或预编译阶段编译,并生成字节码或源代码。

如果有人能指出这样的框架,我将非常高兴。如果它仍在开发中,我也很乐意参与它的创建。

最佳答案

你应该看看 Dozer - Java bean 到 bean 映射器。易于使用,易于扩展。

关于java - 转换java对象的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4113823/

相关文章:

java - Log4j2.xml 在 java hibernate 框架中不会突然创建文件

asp.net-web-api - 如何将复杂类型参数(DTO 对象)传递给 GET 请求?

java - 用 Java Graphics.drawString 替换的充分理由?

java - 我该如何跳出这个循环? java

java - Jersey:打印实际请求

java - 如何在 "manual"后端查询更新后刷新实体

java - 管理数据库中的历史记录

java - Hibernate:session.load 与 session.get

guice - bean映射推土机的替代品?

c# - 如何在C#中填写DTO