主流 ORM (Hibernate, Spring Data JPA) 功能強大但學習曲線陡峭、需大量 XML/註解配置、模型變更維護成本高。BeanKeeper (LGPL, 純 Java) 主打零配置、三介面上手、透明支援集合、自動分頁、跨資料庫可移植,適合中小型專案快速落地。
Store (儲存/查詢/刪除)、TransactionTracker (事務監聽)、Query 介面。size() 仍回傳總筆數。commons-lang-2.4.jar, commons-io-1.4.jar, commons-logging.jar,
commons-collections-3.2.1.jar, commons-configuration-1.6.jar,
log4j-1.2.15.jar, mysql-connector-java-5.0.8-bin.jar
public class EmployeeBean {
String id, name; int age; Date onBoardTime;
// getter/setter 略
}
Store store = new Store("org.gjt.mm.mysql.Driver",
"jdbc:mysql://localhost:3306/lhq?user=root&password=sa");
// 從 CSV 讀取並存入
List lines = FileUtils.readLines(new File(csvFile));
lines.remove(0); // header
for (String line : lines) {
String[] d = line.split(",");
EmployeeBean b = new EmployeeBean();
b.setId(d[0]); b.setName(d[1]);
b.setAge(Integer.parseInt(d[2]));
b.setOnBoardTime(Date.valueOf(d[3]));
store.save(b); // 一行搞定
}
自動在資料庫生成 classes、tablemap (映射元數據)、employeebean (資料表) 等表。

String q = "find EmployeeBean where age<30 and onBoardTime>='2005-01-01' order by id";
List emps = store.find(q); // 回傳 LazyList
for (EmployeeBean e : emps) System.out.println(e.getName());
// emps.size() 可得總筆數,不載入所有資料
EmployeeBean single = store.findSingle(q); // 只取第一筆
// 显式事務
TransactionTracker tt = store.getTransactionTracker();
tt.addListener(new TransactionListener() {
public void transactionCommited(Transaction t) { log("commit"); }
public void transactionRolledback(Transaction t) { log("rollback"); }
});
// 程式碼中手動邊界 (BeanKeeper 2.6 需配合 Store 實作)
// 通常每個 save/remove 即隱式事務,批量操作建議手動控制
| 特性 | BeanKeeper | Hibernate | Spring Data JPA |
|---|---|---|---|
| 配置複雜度 | 零 (僅 JDBC URL) | 高 (XML/註解) | 中 (註解+Repository) |
| 學習曲線 | 極低 (3 介面) | 高 | 中 |
| 集合透明化 | 原生支援 | 需映射設定 | 需映射設定 |
| 自動分頁 | LazyList 內建 | 需 ScrollableResults | 需 Pageable |
| 適用場景 | 中小專案、快速原型 | 企業級複雜系統 | Spring 生態專案 |
BeanKeeper 以「簡單的事簡單做」為哲學,犧牲部分進階功能換取極致的開發效率。若您專案規模中等、團隊希望避開繁瑣 ORM 設定、且需快速交付,它是極佳選擇。下載試用,體驗零配置持久化的輕快感。