我正在开发一个将数据库实体转换为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;
}
重要的要求是不使用任何反射。所有注释或属性文件应在编译或预编译阶段进行编译,并生成字节码或源代码。
如果有人能指点我这样的框架,我将非常高兴。如果它仍在开发中,我也很乐意参与其中。