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

时间:2009-12-23 21:23:15

标签: java persistence jdo object-persistence apache-torque

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

6 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:5)

我遇到的最简单方法是db4o

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

另外,还有很好的方法可以用其他方式进行查询。

答案 3 :(得分:5)

如果选择序列化,请考虑使用流行度API,例如prevalayerSpace4J(更近期)。关于对象患病率:

  

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

检查this article以了解有关此主题的更多信息(有关Google的更多信息)。

答案 4 :(得分:2)

听起来你可能想要坚持到数据库。但是,为了避免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文件,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Foo>
   <Bar>42</Bar>
</Foo>

答案 5 :(得分:2)

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