【发布时间】:2015-05-11 14:05:47
【问题描述】:
我正在处理工作中反复出现的模式。
public class SapExample
{
public static void main(String[] args)
{
// read SAP data..
// get table
List<Map<String, Object>> objects = getTable("ET_WIDGET");
for (Map<String, Object> entry : objects)
{
Object value = entry.get("WDGT_ID");
String id = (value != null) ? String.valueOf(value) : ""; // or null
value = entry.get("WDGT_NAME");
String name = (value != null) ? String.valueOf(value) : ""; // or null
value = entry.get("WDGT_DESC");
String description = (value != null) ? String.valueOf(value) : ""; // or null
// create object from data
//Widget obj = new Widget(id, name, description);
}
}
private static List<Map<String, Object>> getTable(String string)
{
return Collections.emptyList();
}
}
简单的例子,对象之间没有关系。更复杂的场景,其中 A 类有 B 类的成员也确实会发生,并且可以通过使用外键来解决。
从数据库返回的表
被处理为List<Map<String, Object>>,其中Map<String, Object> 描述了给定表中的一行,该行将列名映射到Object 类型的值,这些值在内部主要是String 或Date 类型。
映射包含初始化某种类型的对象所需的数据,这取决于当前表。我无法改变这一点。
程序员以我上面展示的方式直接或间接访问数据并创建所需对象的实例。
我发现这是一种非常冗长且不美观的编程方式。
是否可以利用 JAXB 或其他技术以声明方式(例如通过使用 XML)解决此问题? 如果可以使用 JAXB,我该怎么办?我想我必须重写一些类。
【问题讨论】:
-
您的数据是否存储为 XML?如果是这样,那么是的,您可以使用 XML 解析器,如 DOM 或 SAX 或 JAXB。
-
数据存储为
List<Map<String, Object>>,正如我在问题中提到的那样。 -
不清楚你问的是什么。 JAXB 专门用于 XML 绑定 (JavaXML)。我在您的问题中没有看到任何 XML,所以我不明白您为什么提到这一点。您的问题是关于 1) 数据库 Java 对象映射吗? 2) 初始化默认值? 3) 序列化?
-
你不能简单地使用 Hibernate 或其他 ORM 吗?
-
它是关于以声明方式(例如通过使用 XML)的数据库映射 (SAP)。我正在考虑创建一个可以以声明方式描述的对象模型,并帮助我以
List<Map<String, Object>>的形式从表中创建对象。
标签: java xml serialization jaxb deserialization