Quick’n’dirty持久性

我经常发现自己需要快速(在代码方面),轻量级(在运行时,依赖性方面)持久性解决方案,只需要一堆对象,主要是在应用程序重启之间。

通常我会使用一些Java序列化黑客,但我想知道是否有更好的东西。

你用过类似的东西吗?


为了说清楚,我的书中基于JPA的解决方案并不轻量级 ,而基于JDBC的解决方案并不快


更新 :我赞成无配置框架而不是那些需要配置的框架。 例如,Java序列化解决方案需要一个implements Serializableimplements Serializable 。 带注释或带有映射文件的JPA解决方案太重了。

更新2 :为了说清楚,我不认为序列化是一个黑客。 它实际上是一个非常强大的机制,只是我在做持久性时以一种hackish方式使用它。

我更喜欢XStream :只需要一个Jar,快速且易于使用

试试iBatis 。 我最近在一个项目中使用它,我想要一个没有ORM / spring / container /等的JDBC抽象。

易于安装,只有几个小jar子,配置非常灵活。 它不会为你提供hibernate等的更改-at-at-a-moment-notice灵活性。 人。 但它相当轻巧。

也许db4o适合你。 不要让这个名字欺骗你,它可以嵌入。 根据其教程 :

 Object yourObject = ...; String fileName = ...; // where you wish to store the objects ObjectContainer container = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), fileName); try { container.store(yourObject); } finally { container.close(); } 

我会添加jackson(json)和JAXB(xml) ; 除了已经提到的Xstream之外。 jackson只需要注意一点:如果你确实有广泛的多态存储,反序列化可能会变得棘手。 这就是Xstream工作得更好的地方。

我同意Java序列化不利于持久性 – 它有利于传输序列化对象,但持久性具有时间维度,并且类随时间而变化; 这就是问题开始的地方(我确定你知道这一点,但是因为其他人似乎很难以理解为什么使用序列化很糟糕,所以我会提到它)。 使用文本格式(json,xml)比使用文本格式(json,xml)序列化更容易。 最后,如果你需要空间效率,压缩(如gzip)会产生奇迹,压缩后的数据大小趋于相同,与格式无关(假设信息量相同)

你应该看看JAXB。 它是JRE 6以来Java的一部分。它非常易于使用,并允许您从Java对象模型中驱动XML模式。 最好的部分是你不需要任何额外的jar文件或库,因为它是Java的一部分。 查看javax.xml.bin包。

有关JAXB项目本身的信息: https : //jaxb.dev.java.net

链接到JRE中的JavaDocs: http : //java.sun.com/javase/6/docs/api/javax/xml/bind/package-frame.html

  1. 对于对象集合,请尝试JDBM (一个jar)。 为您提供存储在磁盘上的映射。

    DB db = new DBMaker(fileName).build();

    Map map = db.createTreeMap("mapName")

    map.put("obj1", myObject1);

  2. 对于配置, JAXB非常简单,没有依赖项。 XML中的商店。

    JAXB.marshall(myObject, new File("config.xml") ); // saved. that's it

你寻找

持久化解决方案,只需一堆对象

那么为什么Java内置序列化是一个黑客?

如果你很懒,也许用JSON串行可以帮到你。

Prevayler对你来说听起来不错。

它基于Java序列化,速度非常快。

更多信息:

查看BeanKeeper – 这是我见过的最快,最脏,最简单的ORM /持久性。 肯定胜过iBatis。

 Store myStore = new Store((DataSource) ctx.lookup("jdbc/myds")); package com.acme.bookstore; public class Book { private String title; private Author author; ...setters, getters... } package com.acme.bookstore; public class Author { private String firstName; private String lastName; private Date birthDate; ...setters, getters... } store.save(book);