Вот элегантная, общая реализация в Scala, как описано в 99 Scala Problems .
object P26 {
def flatMapSublists[A,B](ls: List[A])(f: (List[A]) => List[B]): List[B] =
ls match {
case Nil => Nil
case sublist@(_ :: tail) => f(sublist) ::: flatMapSublists(tail)(f)
}
def combinations[A](n: Int, ls: List[A]): List[List[A]] =
if (n == 0) List(Nil)
else flatMapSublists(ls) { sl =>
combinations(n - 1, sl.tail) map {sl.head :: _}
}
}
Я предпочитаю XStream : нужен только один Jar, быстрый и очень простой в использовании
Попробуйте iBatis . Я недавно использовал его в проекте, где мне нужна была абстракция JDBC без ORM / spring / container / и т. Д.
Простота настройки, всего пара небольших банок, и конфигурация очень гибкая. Это не даст вам гибкости изменения-в-в-моменте-уведомлениях гибернации и т. Д. al. но он довольно легкий.
Возможно, вам подойдет 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. Джексон хорошо работает с одной оговоркой: если у вас есть обширное полиморфное хранилище, десериализация может оказаться сложной. Вот где Xstream работает лучше.
И я согласен с тем, что сериализация Java не подходит для персистентности - это хорошо для передачи сериализованных объектов, но постоянство имеет временное измерение, и классы меняются со временем; и здесь начинаются проблемы (я уверен, что вы это знаете, но, поскольку другие, кажется, не понимают, почему peristing-using-serialization - это плохо, я хотел бы упомянуть об этом). Кроме того, намного проще наблюдать за сериализованными текстовыми форматами (json, xml), чем с двоичными. И, наконец, если вам нужна экономия места, сжатие (например, gzip) творит чудеса, размер данных после сжатия, как правило, идентичен, независимо от формата (при условии одинакового количества информации)
Вы ищете
решение с сохраняемостью для простого куча объектов
Так почему же встроенная сериализация Java - это хитрость?
Если вы ленивы, возможно, вам поможет сериализация с помощью JSON .
Prevayler кажется вам хорошим вариантом.
Он основан на сериализации Java и чертовски быстр.
Дополнительная информация:
Вы должны посмотреть на JAXB. Он является частью Java, начиная с JRE 6. Он довольно прост в использовании и позволяет управлять XML-схемой из объектной модели Java. Самое приятное то, что вам не нужны дополнительные файлы jar или библиотеки, поскольку это часть Java. Ознакомьтесь с пакетом javax.xml.bin.
Информация о самом проекте JAXB: https://jaxb.dev.java.net
Ссылка на JavaDocs в JRE: http://java.sun.com/javase/6/docs/api/javax/xml/bind/package-frame.html
Проверить out 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);