db4o (database for objects) 是原生物件導向資料庫,直接儲存 Java 物件圖,無需映射層、SQL 或 Schema 遷移。本文介紹核心概念、基本 CRUD 操作與適用場景評估。
public class Person {
private String firstName;
private String lastName;
private int age;
// 建構子、getter/setter、equals/hashCode、toString...
}
ObjectContainer db = Db4o.openFile("persons.data");
try {
// 操作...
db.commit();
} finally {
if (db != null) db.close();
}
Person brian = new Person("Brian", "Goetz", 39);
db.set(brian); // 新增或更新 (依 equals 判斷)
db.commit();
// 原型查詢:建立範例物件,null 欄位視為萬用字元
ObjectSet brians = db.get(new Person("Brian", null, 0));
while (brians.hasNext()) {
System.out.println(brians.next());
}
Person[] people = { brian, jason, clinton, david, glenn, neal };
for (Person p : people) db.set(p);
db.commit();
// 查詢所有 Brian
ObjectSet result = db.get(new Person("Brian", null, 0));
| 適用 | 不適用 |
|---|---|
| 嵌入式應用、桌面軟體、小型伺服 | 大型企業級高併發系統 |
| 複雜物件圖、頻繁 Schema 變更 | 需複雜 SQL 報表、多表關聯查詢 |
| 原型開發、測試資料快照 | 異構語言共享資料 (雖有 .NET 版) |
| 單一應用獨佔資料存取 | 需資料庫級鎖、預存程序、視圖 |
IBM DeveloperWorks 完整教程:https://www.ibm.com/developerworks/cn/java/jdb4o/?ca=j-h
db4o 適合「物件思維優先、關係思維次要」的專案,讓持久化隱形化,專注領域模型設計。