pojo和DTO有许多可用的映射器工具。检查链接:any tool for java object to object mapping? 但是有没有工具自动生成DAO,Service类?
推土机样品:
<mapping>
<class-a>yourpackage.SourceClassName</class-a>
<class-b>yourpackage.DestinationClassName</class-b>
<field>
<A>yourSourceFieldName</A>
<B>yourDestinationFieldName</B>
</field>
</mapping>
SourceClassName sourceObject = ...
Mapper mapper = new DozerBeanMapper();
DestinationObject destObject =
mapper.map(sourceObject, DestinationClassName.class);
assertTrue(destObject.getYourDestinationFieldName().equals(sourceObject.getYourSourceFieldName));
这里的xml配置很好,但我可以跳过代码部分,只需指定POJO-DTO配置或POJO-DTO以及过滤器配置。并且某些工具应该能够以DAO和Service类的形式自动生成中间转换代码。有没有这样的工具?
答案 0 :(得分:0)
我晚了,我最近开发了一个名为beanknife的注解处理器,它支持从任何类生成DTO。您需要通过注释进行配置。但是您不需要更改原始类。该库支持在单独的类上进行配置。当然,您可以选择您想要的属性和不需要的属性。您可以通过配置类中的静态方法添加新属性。这个库最强大的功能是它支持自动将对象属性转换为 DTO 版本。例如
class Pojo1 {
String a;
Pojo b;
}
class Pojo2 {
Pojo1 a;
List<Pojo1> b;
Map<List<Pojo1>>[] c;
}
@ViewOf(value = Pojo1.class, includePattern = ".*", excludes={Pojo1Meta.b})
class ConfigureOfPojo2 {}
@ViewOf(value = Pojo2.class, includePattern = ".*")
class ConfigureOfPojo2 {
// convert b to dto version
@OverrideViewProperty(Pojo2Meta.b)
private List<Pojo1View> b;
// convert c to dto version
@OverrideViewProperty(Pojo2Meta.c)
private Map<List<Pojo1View>>[] c;
}
会产生
// meta class, you can use it to reference the property name in a safe way.
class Pojo1Meta {
public final String a = "a";
public final String b = "b";
}
// generated DTO class. The actual one will be more complicate, there are many other method.
class Pojo1View {
private String a;
public Pojo1View read(Pojo1 source) { ... }
... getters and setters ...
}
class Pojo2Meta {
public final String a = "a";
public final String b = "b";
public final String c = "c";
}
class Pojo2View {
private String a;
private List<Pojo1View> b;
private Map<List<Pojo1View>>[] c;
public Pojo1View read(Pojo2 source) { ... }
... getters and setters ...
}
这里有趣的是您可以安全地使用源中尚不存在的类。虽然编译器可能会报错,但编译后一切都会好起来的。因为所有额外的类都会在编译之前自动生成。 更好的做法可能是一步一步编译,先添加@ViewOf注解,然后再编译,这样以后需要用到的类都生成了。配置完成后再次编译。这样做的好处是IDE不会有语法错误提示,可以更好的利用IDE的自动完成功能。
要在代码中使用DTO对象,只需像这样调用静态读取方法
Pojo2 source = ...
Pojo2View dto = Pojo2View.read(source);
List<Pojo2> listSource = ...
List<Pojo2View> dtoList = Pojo2View.read(listSource)
Map<String, Pojo2> mapSource = ...
List<Pojo2View> dtoMap = Pojo2View.read(mapSource)
没有反射,没有魔法。您可以在生成的类中检查所有逻辑。