现在我有java程序,它的类当前是POJO并存储在易失性存储器中。这些需要坚持。据我所知,两种流行的选择是JDO和Java持久性API。对于对SQL,Torque等知之甚少的人来说,这是将持久性添加到我的程序数据中的最简单方法?坚持java对象最简单的方法是什么?
回答
序列化到文件系统的传统方式是使用Java Serialisation。但是,您需要随处实施Serializable。
更简单的解决方案是使用XStream将XML序列化(然后转储到文件系统)。你不需要实现任何接口,并且大部分东西都是串行化和反序列化的,无需进一步干预。如果需要,您可以进一步自定义序列化。我曾经有过唯一的问题是序列化的一个内部类没有故意连载含有外部类(这是由于隐this
参考)
如果您不知道SQL或关系数据库,则将对象序列化到文件系统。
您必须学习JDBC以使用JDO,JPA,Hibernate或其他任何东西。除非你的POJO非常复杂,否则我会建议从那里开始并继续努力。
确保您了解了索引的规范化和正确设计。
要使用JDO,JPA或Hibernate,您显然不需要知道JDBC,因为这是这些API的要点。他们在坚持使用RDBMS时使用JDBC,这样复杂性就隐藏起来了 – DataNucleus 2009-12-25 19:07:43
我不同意 - 不建议在不知道JDBC的情况下使用它们。复杂性是隐藏的,但它是一个抽象的漏洞。 – duffymo 2009-12-25 20:26:39
不是JDO的泄漏抽象,尽管JPA和Hibernate肯定与JDBC紧密相关。取决于提问者决定去哪个API – DataNucleus 2009-12-26 09:20:16
听起来像你可能想坚持一个数据库。但是,为了避免DB的复杂性,将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();
}
}
}
比方说你坚持美孚的一个实例,其中毫巴是42,那么这个解决会产生像这样的XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Foo>
<Bar>42</Bar>
</Foo>
DataNucleus隐藏了用户的所有编组和解组,并且他们只是将JDO或JPA注释添加到他们想要保留的类中。代码较少。较少处理 – DataNucleus 2009-12-25 19:08:22
如果序列化是一个选项,请考虑使用流行API,如prevalayer或Space4J(更新)。关于对象患病率:
患病率是由克劳斯Wuestefeld如何将数据存储在一个真正的面向对象的方式,只用内存快照,事务日志和系列化开始的概念。
请检查this article以了解有关此主题的更多信息(Google上的更多内容)。
Space4j还提供透明的群集和索引。 – TraderJoeChicago 2011-09-13 02:00:28
DataNucleus是最简单的方法,因为它提供了JDO和JPA API,用于持久化几乎任何您想要的数据存储类型。为什么在DataNucleus为你做的时候,为什么要在其他回复中写入所有JAXB代码呢?全部由Java标准支持
- 1. 在Java中操纵ActiveX对象的最好/最简单的方法是什么?
- 2. 探索Rally对象模型最简单的方法是什么?
- 3. 什么是从DataTable填充简单对象的最快方法?
- 4. 从C++调用Java方法的最简单方法是什么?
- 5. 检查ZXing支持的最简单方法是什么?
- 6. 什么是保持悬停后效果最简单的方法
- 7. 坚持HashMap的最有效方法是什么?
- 8. 访问对象的单个属性最简单的方法是什么?
- 9. 什么是在开发和实验过程中坚持对象在.net中的简单/轻量级方法?
- 10. 坚持/缓存Web响应的最简单方法
- 11. Grails:在GORM中坚持hashmap的最简单方法
- 12. 在java中构建IDE最简单的方法是什么?
- 13. 在Java中拉取JSON URL最简单的方法是什么?
- 14. 在Java中实现Scala PartialFunction的最简单方法是什么?
- 15. 在Java中创建GUI的最简单方法是什么?
- 16. Django:测试对象是否在集合中的最简单方法是什么
- 17. 使用Struts 2坚持表单数据的最佳方法是什么?
- 18. 什么是存储使用GridFS的流星大对象最简单的方法?
- 19. 摆动数据对象的编辑器,最简单的方法是什么?
- 20. 将freemarker对象呈现为JSON的最简单方法是什么?
- 21. 从Tuple2数组创建案例类对象的最简单方法是什么?
- 22. 用jQuery搜索JavaScript对象列表的最简单方法是什么?
- 23. 使用javascript制作文档对象副本的最简单方法是什么
- 24. 什么是最简单的Java ORM支持Sqlite?
- 25. 什么是从Javascript调用C#方法的最简单方法
- 26. Java:什么是读取序列化对象的最佳方法?
- 27. 什么是最简单的方法来禁用表单,但保持可读性?
- 28. 坚持用户选择的最佳方式是什么?
- 29. jQuery的表单验证最简单的方法是什么?
- 30. 什么是春季最简单/最透明的缓存方法?
对于所有(非)神圣的东西,尽可能远离扭矩。 – ChssPly76 2009-12-23 21:28:36