持久化java对象最简单的方法是什么?

现在我有java程序,其类目前是POJO并存储在易失性存储器中。 这些都需要坚持下去。 据我所知,两个流行的选择是JDO和Java Persistence API。 对于那些对SQL,Torque等知之甚少的人来说,这是为程序数据添加持久性的最简单方法吗?

序列化到文件系统的传统方法是使用Java序列化 。 但是,您需要在任何地方实现Serializable 。

一个更简单的解决方案是使用XStream序列化为XML(然后转储到文件系统)。 您不需要实现任何接口,并且大多数所有内容都可以串行化和反序列化而无需进一步干预。 如果需要,您可以进一步自定义序列化。 我曾经遇到的唯一问题是序列化内部类而不是故意序列化包含的外部类(这是由于隐含的this引用)

如果您不了解SQL或关系数据库,请将对象序列化到文件系统。

您将不得不学习JDBC以使用JDO,JPA,Hibernate或其他任何东西。 除非你的POJO非常复杂,否则我建议你从那里起步并继续努力。

确保您了解索引的规范化和正确设计。

我遇到的最简单的方法是db4o :

 ObjectContainer db = Db4o.openFile(location); db.store(myObject); List myObjects = db.query(MyObject.class); 

此外,还有很好的方法可以通过其他方式进行查询。

如果序列化是一种选择,请考虑使用prevalayer或Space4J等普遍性API(更新)。 关于对象患病率:

普遍性是Klaus Wuestefeld在如何以真实的面向对象的方式存储数据时开始的概念,仅使用内存快照,事务日志和序列化。

查看此文章以了解有关此主题的更多信息(有关Google的更多信息)。

听起来你可能想要坚持到数据库。 但是,为了避免DB的复杂性,将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(); } } } 

让我们说你坚持一个Foo的实例,其中mBar是42然后这个解决方案将生成一个XML文件,如下所示:

   42  

DataNucleus是最简单的方法,因为它提供了JDO和JPA API,可以持久化到您想要的几乎任何类型的数据存储。 为什么DataNucleus会为您执行此操作时,为什么要在其他一个回复中编写所有JAXB代码? 全部由Java标准支持

Interesting Posts