2016-07-03 10 views
1

私は趣味/学習プロジェクトに取り組んでいます。データを保持する必要がありますが、データベースを使用したくありません。いくつかの調査の後で、JAXBを使用することは良いアイデアかもしれないが、私はそれを使用して周りを包んでいるように見えることはできません。私はチュートリアルとドキュメンテーションも読んでいますが、私はそれをクリックしません。スタンドアロンプ​​ログラム用のjaxbを使用してJavaでデータを永続化する

プログラムは領収書の保管/予算タイプのものなので、何とか領収書を保存する必要があります。

関連するクラスは、これまでのようになります。

package classes; 

import java.time.*; 
import java.util.ArrayList; 
import java.util.List; 

public class Receipt { 

    private String shop; 
    private LocalDate date; 
    private Double total; 
    private List<Entry> items; 

//...contructor,getters & setters 

package classes; 

public class Entry { 

    private String name; 
    private Double price; 

//...contructor,getters & setters 

そして、私はちょっとこのようなルックスを持っているしたいと思います。だから、

<Receipts> 
    <Receipt> 
     <Shop>Tesco</Shop> 
     <Date>2016-06-03</Date> 
     <Total>200</Total> 
     <Items> 
      <Item>foo 100</Item> 
      <Item>bar 100</Item> 
     </Items> 
    </Receipt> 
    ... 
</Receipts> 

I私は2つの質問があります:
1. JAXBで正しいトラックにいるのですか?それはリグですか?スタンドアロンアプリケーションのデータを永続化する方法はありますか?
2.どうすればいいですか?私はすべての注釈やスキーマやものを理解していません。

私は良いチュートリアルを教えてくれたり、教訓のあるガイドを書いたりしてくれてありがとう。

ありがとうございました

+1

JAXBはそれ自体は何も保持しませんが、JavaオブジェクトをXMLデータに変換するツールを提供しますあなたが概説したものまで)。そのデータをファイルシステム上のファイルに書き込んだり、必要なときにそれらのデータを読み取ったりすることは、あなた次第です。これは、JAXBのapiの役に立つガイドのようです:http://www.mkyong.com/java/jaxb-hello-world-example/ファイルを読み書きするには、これを(oracleからまっすぐに)チェックアウトしてください:https:// docs。 oracle.com/javase/tutorial/essential/io/file.html特にこのセクション:テキスト・ファイルのバッファ済I/Oメソッド –

+0

(Rant:推移的動詞として "persist"を嫌う方法。 1990年頃には、永続性はデータの宣言的な性質であり、プログラマやプログラムによって行われた手続き的な行動ではないという考えが全体的にありました。 –

答えて

0

JAXBは永続エンジンではありません。これを使用して、XMLをJavaオブジェクトまたはオブジェクトに変換してXMLに変換できます。データは、ファイルまたはデータベースに保存することもできます。 JAXBはデータベースを置き換えません。あなたは検索、異なるエンティティ間の関係、インデックス、XMLデータが完全に読み込まれます。

あなたの学習プロジェクトでこれを使用したい場合、これらは主要な部分です。私は

Javaは(XMLへのJava)

//Added XmlRootElement and XmlElement for list 
@XmlRootElement(name = "Receipts") 
public class Receipts { 
    private List<Receipt> receipts; 

    @XmlElement(name = "Receipt") 
    public List<Receipt> getReceipts() { 


//Added XmlElementWrapper and XmlElement for list 
public class Receipt { 

    private String shop; 
    private Date date; //Changed to Date because marshalling is directly supported 
    private Double total; 
    private List<Entry> items ; 

    @XmlElementWrapper(name="Items") 
    @XmlElement(name = "Item") 
    public List<Entry> getItems() { 

//No changes  
public class Entry { 
    private String name; 
    private Double price; 

マーシャルオブジェクトモデルをマップするためにコーディングするだけの注釈や変更が含まれ

JAXBContext jaxbContext = JAXBContext.newInstance(Receipts.class); 
Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
jaxbMarshaller.marshal(receipts, new File(file); 

たUnmarshaller(JavaへのXML)

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
Receipts receiptsUnmarshalled = (Receipts) jaxbUnmarshaller.unmarshal(file); 
関連する問題