假设一个Java对象:
Object obj = new Object();
如何将此对象存储在数据库中以保持此状态,并且在存储之后,应该很容易转换为Java对象,就像存储它一样?
答案 0 :(得分:5)
其中任何一项都可以:
或者只是简单的JDK XMLEncoder
/ XMLDecoder
(introductory article),但如果你问我,那就是驴子的痛苦。
答案 1 :(得分:4)
此外,JAXB。 (Hello World example)
答案 2 :(得分:2)
答案 3 :(得分:2)
注意:我是EclipseLink JAXB (MOXy)负责人,也是JAXB 2(JSR-222)专家组的成员。
如何将Java对象转换为XML字符串,反之亦然 XML到Java对象?
使用JAXB,您可以将对象封送到java.io.StringWriter
以生成String
,并利用java.io.StringReader
从String
解组对象。
然后我想将这个对象存储在数据库中
Java EE 解决方案是使用 JPA 实现(TopLink / EclipseLink,Hibernate,Open JPA等)将对象存储在数据库和 JAXB 实现(TopLink / EclipseLink,Metro,Apache JaxMe等)将对象转换为XML或从XML转换。
由于您将对象保存到数据库,因此需要确保对象到XML映射(OXM)解决方案需要考虑以下事项:
双向关系
与对象 - 关系映射(ORM)解决方案一起使用的对象模型通常具有双向关系。您需要确保这不会将OXM层发送到循环中。例如, MOXy JAXB 具有@XmlInverseReference
扩展名来处理此问题:
懒惰的关系
许多ORM解决方案提供了一种机制,可以轻松实现对象之间的关系。有些像TopLink / EclipseLink修改Java字节码以将逻辑添加到“get”方法。您将需要一个能够利用字段和属性的OXM解决方案。在MOXy或任何JAXB实现中,这是通过@XmlAccessorType
:
复合键/嵌入式键类
数据库表通常具有复合键。如果这些密钥也将用于文档内引用,那么您将需要一个可以处理它的OXM解决方案。 MOXy提供@XmlKey
和@XmlJoinNodes
:
答案 4 :(得分:0)
以下是AbacusUtil最简单,最快速的代码:
Account account = N.fill(Account.class);
String xml = N.toXML(account);
N.println(xml); // <account><id>6264304841028291043</id><gui>33acdcbe-fd5b-49</gui><emailAddress>19c1400a-97ae-43</emailAddress><firstName>67922557-8bb4-47</firstName><middleName>7ef242c9-8ddf-48</middleName><lastName>1ec6c731-a3fd-42</lastName><birthDate>1480444055841</birthDate><status>1444930636</status><lastUpdateTime>1480444055841</lastUpdateTime><createTime>1480444055841</createTime></account>
Account account2 = N.fromXML(Account.class, xml);
assertEquals(account, account2);
声明:我是AbacusUtil的开发者。