歡迎您光臨本站 註冊首頁

DB4O 社區版 8.1.9 發布,Java Lambda 查詢資料庫

←手機掃碼閱讀     admin @ 2019-09-30 , reply:0

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社區版本代碼下載

產品對比
Db4o 採用很炫的面向對象技術。
iBoxDB 面向高性能與安全數據隔離。


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/110252/db4o-8-1-9-released
DB4O 社區版 8.1.9 發布,Java Lambda 查詢資料庫已經有271次圍觀

http://coctec.com/news/all/show-post-215715.html