我正在寻找一个java“工作流程”,它执行以下操作:
- 从数据库中获取对象
- 序列化为json
- 收回它
- 更新数据库
这必须是“普通”Java。我的意思是没有像 Spring 或 Seam 或类似的全栈框架。
目前,我在客户端使用 MySQL/JPA/Hibernate 进行 ORM,使用 Jackson 进行 JSON 映射,并使用 AngularJS。
对于简单的对象来说,这一切都很好。但随着对象变得越来越复杂,我发现自己编写了越来越多的映射代码。
例如考虑这个(简化的)对象:
class Website {
long id;
String name;
List<Domain> domains;
}
class Domain {
long id;
String url;
Set<String> countries;
}
它将映射到三个表:Website
、Domain
、Country
jackson 做得很好,将其序列化为类似(再次简化):
{
id: 1,
name: "My Website"
domains: [ {
id: 1,
url: "www.mysite.de",
countries: [ "de" ]
}, {
id: 2,
url: "www.mysite.com",
countries: [ "uk", "us" ]
} ]
}
Angular 可以很好地处理。
但是在客户端上使用它之后,我可能会在 POST 请求中得到这个:
{
id: 1,
name: "My Website"
domains: [ {
id: 1,
url: "www.mysite.de",
countries: [ "de", "at", "ch" ]
}, {
url: "www.mysite.co.uk",
countries: [ "uk" ]
}, {
url: "www.mysite.us",
countries: [ "us" ]
} ]
}
Jackson 可以将其映射到相应的 Java 对象,但不会以这种形式存储在数据库中。
现在我必须开始“分析”创建的 java 对象并且:
- 获取正确的旧对象
- 将新对象的数据复制到旧对象中并处理:
- 删除不再存在的子对象
- 更新已更改的内容
- 插入新的
- 然后将其合并回数据库
随着对象变大并包含更多更深的引用链,它会变得非常困惑。
那么有没有更好的方法来手动更新数据库对象?或者有什么工具可以提供帮助吗?
提前致谢!
最佳答案
如果您使用 NoSQL 数据库(例如 MongoDB),您只需将 Jackson 生成的 POJO 存储到数据库中并查询/检索它。
如果没有,那么只需设置您的 Jackson 注释,以不同的方式将字段从 JSON 映射到 Java,或者设置您的 hibernate 映射,以不同的方式从 Java 映射到数据库,并以这种方式匹配所有内容。
如果你确实不能让它以这种方式工作,那么就拥有“客户端”对象和“服务器端”对象 - 然后为每个对象提供一个从另一个对象构建它的构造函数。
然后你可以这样做:
ClientFoo in = ...;
ServerFoo serverIn = new ServerFoo(in);
// Save to database
// Later
serverFoo out = ...;
ClientFoo clientOut = new ClientFoo(out);
// Send to client.
这至少将所有数据映射代码保留在一个位置并将其封装起来,远离其他所有内容。
关于Java:JPA/JSON/REST 往返工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20839046/