目前,我有一个Java程序,其类当前为POJO,并存储在易失性内存中。这些需要被持久化。据我所了解,两个流行的选择是JDO和Java持久化API。对于不太了解SQL、Torque等知识的人来说,哪种方法是将持久性添加到我的程序数据最简单的方法?
目前,我有一个Java程序,其类当前为POJO,并存储在易失性内存中。这些需要被持久化。据我所了解,两个流行的选择是JDO和Java持久化API。对于不太了解SQL、Torque等知识的人来说,哪种方法是将持久性添加到我的程序数据最简单的方法?
this
引用所致)。如果您不了解SQL或关系型数据库,则可以将对象序列化到文件系统中。
如果要使用JDO、JPA、Hibernate或其他任何技术,您需要学习JDBC。除非您的POJO非常复杂,否则建议从此处开始,并逐步深入。
确保您了解规范化和索引的正确设计。
我目前遇到的最简单的方法是使用db4o:
ObjectContainer db = Db4o.openFile(location);
db.store(myObject);
List<MyObject> myObjects = db.query(MyObject.class);
此外,还有一些非常好的查询方式。
普及性是由Klaus Wuestefeld提出的一个概念,用于以真正的面向对象方式存储数据,仅使用内存快照、事务日志和序列化。
请查看this article以了解更多信息(在Google上有更多信息)。
听起来你可能想要将数据持久化到数据库中,但是为了避免数据库的复杂性,一种简单的解决方案是将POJO对象序列化到XML文档中进行持久化。Java 1.6 API中包含了javax.xml.bind包中的JAXB框架。使用JAXB时,你只需要给你的POJO对象添加注释,并创建marshal和unmarshal方法即可:
@XmlRootElement(name="Foo")
public class Foo {
@XmlElement(name="Bar")
public int mBar;
public static void marshal(Foo foo, OutputStream out) IOException {
try {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(qaConfig, out);
}
catch (JAXBException ex) {
throw new IOException(ex);
}
finally {
out.close();
}
}
public static Foo unmarshal(InputStream in) throws IOException {
try {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
return (Foo)unmarshaller.unmarshal(in);
}
catch (JAXBException ex) {
throw new IOException(ex);
}
finally {
in.close();
}
}
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Foo>
<Bar>42</Bar>
</Foo>