快速而肮脏的坚持[关闭]

问题描述 投票:0回答:9

我经常发现自己需要一个快速(就代码而言)、轻量级(就运行时、依赖关系而言)的持久性解决方案,用于简单的一堆对象,主要是在应用程序重新启动之间。

通常我会求助于一些 Java 序列化 hack,但我想知道是否有更好的东西。

你用过类似的东西吗?


明确地说,在我的书中,基于 JPA 的解决方案“不是轻量级”,而基于 JDBC 的解决方案“不是很快”。 更新

:与需要配置的框架相比,我更喜欢无配置的框架。例如,Java 序列化解决方案需要一个
implements Serializable

并且它可以工作。 JPA 解决方案,无论是带有注释还是带有映射文件都太重量级了。

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

我更喜欢

XStream
java persistence
9个回答
10
投票

尝试

iBatis

5
投票

易于设置,只需几个小罐子,并且配置非常灵活。它不会为您提供 hibernate 等的瞬间更改数据库的灵活性。等人。但它相当轻。

也许

db4o

3
投票
其教程

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)

3
投票
JAXB (xml)

;除了已经提到的 Xstream 之外。 Jackson 工作得很好,但有一点需要注意:如果您确实有大量的多态存储,反序列化可能会变得很棘手。这就是 Xstream 效果更好的地方。 我同意Java序列化不利于持久化——它有利于传输序列化对象,但持久化具有时间维度,并且类会随着时间而变化;这就是问题开始的地方(我相信你知道这一点,但由于其他人似乎对为什么持久使用序列化不好,我想我会提到它)。 与二进制格式相比,使用文本格式(json、xml)序列化的内容也更容易查看。最后,如果您需要空间效率,压缩(如 gzip)会产生奇迹,压缩后的数据大小往往相同,与格式无关(假设信息量相同)

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


2
投票
https://jaxb.dev.java.net

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


2
投票
JDBM
    (一罐)。为您提供存储在磁盘上的地图。
  1. DB db = new DBMaker(fileName).build();

    Map<String,MyObject> map = db.createTreeMap("mapName")

    map.put("obj1", myObject1);

    对于配置

    JAXB
  2. 非常简单,并且没有依赖项。以 XML 形式存储。
  3. JAXB.marshall(myObject, new File("config.xml") ); // saved. that's it

        

  4. 你寻找

1
投票
持久化解决方案 一堆物体

那么为什么 Java 内置序列化是一种 hack 呢?

如果你很懒,也许用
JSON

进行序列化会帮助你。

Prevayler

1
投票

它基于 Java 序列化,而且速度非常快。 更多信息请访问:

http://www.prevayler.org/

http://www.prevayler.org/wiki/
  • 查看
BeanKeeper

1
投票

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);

© www.soinside.com 2019 - 2024. All rights reserved.