gpt4 book ai didi

java - 使用 jaxb 在 java 中持久保存独立程序的数据

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:04 25 4
gpt4 key购买 nike

我正在从事一个爱好/学习项目,我需要保留一些数据,但我不想使用数据库。经过一些研究,我发现使用 JAXB 可能是一个好主意,但我似乎无法全神贯注于使用它。我阅读了教程和文档,但它就是不适合我。

该程序是收据存储/预算类型的东西,所以我需要以某种方式保存收据。

到目前为止,相关类如下所示:

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>

所以我想,我有两个问题:
1. 我使用 JAXB 的方向正确吗?这是为独立应用程序保存数据的正确方法吗?
2.我该怎么做?我不理解所有的注释和模式之类的东西。

如果有任何帮助,请给我指出一个好的教程,或者编写一个非常有指导性的指南,我将不胜感激。

谢谢

最佳答案

JAXB 不是持久性引擎。您可以使用它将 XML 转换为 Java 对象或将对象转换为 XML。数据可以保存在文件甚至数据库中。 JAXB 不会取代数据库。您没有搜索、不同实体之间的关系、索引、完全加载 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;

Marshall(Java 到 XML)

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

解码器(XML 到 Java)

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Receipts receiptsUnmarshalled = (Receipts) jaxbUnmarshaller.unmarshal(file);

关于java - 使用 jaxb 在 java 中持久保存独立程序的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38174731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com