8

現在、クラスが現在 POJO であり、揮発性メモリに格納されている Java プログラムがあります。これらは永続化する必要があります。私が理解しているように、2 つの一般的な選択肢は JDO と Java Persistence API です。SQL や Torque などについてほとんど知らない人にとって、プログラムのデータに永続性を追加する最も簡単な方法はどれですか?

4

6 に答える 6

8

ファイルシステムにシリアル化する従来の方法は、Java Serializationを使用することです。ただし、どこでもSerializableを実装する必要があります。

より簡単な解決策は、 XStreamを使用して XML にシリアル化 (およびファイル システムにダンプ) することです。インターフェイスを実装する必要はなく、ほとんどすべてが追加の介入なしにシリアライズおよびデシリアライズされます。必要に応じて、シリアル化をさらにカスタマイズできます。私が今までに経験した唯一の問題は、意図的に含まれている外部クラスをシリアル化せずに内部クラスをシリアル化することです (これは暗黙のthis参照によるものです)

于 2009-12-23T22:19:09.777 に答える
6

SQL またはリレーショナル データベースがわからない場合は、オブジェクトをファイル システムにシリアル化します。

JDO、JPA、Hibernate、またはその他のものを使用するには、JDBC を学習する必要があります。POJO が非常に複雑でない限り、そこから始めて徐々に作業を進めることをお勧めします。

インデックスの正規化と適切な設計について学んでください。

于 2009-12-23T21:27:03.583 に答える
5

シリアル化がオプションの場合は、prevalayerSpace4J(最新)などの普及APIの使用を検討してください。オブジェクトの普及について:

普及率は、メモリスナップショット、トランザクションログ、およびシリアル化のみを使用して、実際のオブジェクト指向の方法でデータを保存する方法についてKlausWuestefeldによって開始された概念です。

このトピックの詳細については、この記事を確認してください(Googleの詳細)。

于 2009-12-23T22:58:06.720 に答える
5

私がまだ遭遇した最も簡単な方法はdb4oです:

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

さらに、他の方法でクエリを実行するための非常に優れた方法があります。

于 2009-12-23T22:41:59.573 に答える
2

DataNucleusは最も簡単な方法です。DataNucleus は、ほぼすべてのタイプのデータストアに永続化するための JDO および JPA API を提供するためです。DataNucleus が代わりに JAXB コードを作成するのに、なぜ他の応答の 1 つにその JAXB コードをすべて記述するのでしょうか? すべてJava標準とオープンソースに支えられています。

開示: この回答の作成者は、DataNucleus プロジェクトに関連付けられています。

于 2009-12-24T08:29:16.537 に答える
2

DB に永続化する必要があるようです。ただし、DB の複雑さを回避するために、POJO をファイル システムに永続化するための 1 つの簡単な解決策は、POJO を XML ドキュメントにシリアル化することです。Java 1.6 API には、javax.xml.bind パッケージにあるJAXBフレームワークが含まれています。JAXB を使用するには、基本的に POJO に注釈を付け、次のように整列化および非整列化メソッドを作成します。

@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();
      }
   }
}

mBar が 42 である Foo のインスタンスを永続化すると、このソリューションは次のような XML ファイルを生成します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Foo>
   <Bar>42</Bar>
</Foo>
于 2009-12-23T22:13:08.763 に答える