Db4o 是一個面向對象資料庫,能對複雜的對象結構進行持久化,支持單用戶模式,多用戶模式。
這版本把 Java7-Java11的一些有用新指令補上,主要是為了編譯 Java11 的 Lambda 語句,
Lambda 在底層使用了新指令,這個版本的 Db4o 還是基於 Java7,以補丁方式編譯 Lambda。在OpenJDK11 上測試通過。
Java Lambda 已經很多年了,支持Lambda查詢資料庫的類庫還很少,
這裡直接把 Lambda 放入到 Db4o 中,簡單查詢條件直接編譯為資料庫查詢語句。
使用例子
初始化
public static class Detail {
@Indexed
public long type;
public String memo;
public Record record;
}
public static class Record {
@Indexed
public String name;
public String noName;
@Indexed
public double indexField;
public double noIndexField;
public Detail detail;
}
String dbname = "index.j.db";
var ecfg = Db4oEmbedded.newConfiguration();
var memory = new MemoryStorage();
ecfg.file().storage(memory);
ecfg.common().add(new TransparentActivationSupport());
ecfg.common().add(new TransparentPersistenceSupport());
ecfg.file().generateUUIDs(ConfigScope.GLOBALLY);
try (var oc = Db4oEmbedded.openFile(ecfg, dbname)) {
}
插入對象
try (var see = oc.ext().openSession()) {
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 50; j++) {
var r = new Record();
r.name = "Name-" + i;
r.noName = r.name;
r.indexField = (double) i;
r.noIndexField = i;
r.detail = new Detail();
r.detail.record = r;
r.detail.type = j;
r.detail.memo = r.name + " on meno";
see.store(r);
}
}
see.commit();
}
Java Lambda 查詢數據,一句實現全部表達,升級的代碼就是為了運行這句在資料庫上
var rs = see.query((Record r) -> r.indexField == value);
如果希望像普通 Lambda 一樣運行,把欄位名放在右邊
產品對比
Db4o 採用很炫的面向對象技術。
iBoxDB 面向高性能與安全數據隔離。
[admin
]