針對輕量級應用(桌面程式、小型Web專案),關聯式資料庫過於龐大,OO資料庫學習曲線陡峭。XML憑藉人類可讀、跨平台、無需額外安裝等優勢,成為極佳替代方案。本文實作具備CRUD、執行緒安全、記憶體快取(檔案遺失仍可運作)的XML持久層。
Hashtable快取,提供同步化的add/delete/update,查詢支援MemberFilter策略模式。dom4j解析/寫入,拋出XmlFileReadException/XmlFileWriteException統一錯誤處理。synchronized (lockObj) {
try {
memberPersistence.add(member); // 先寫檔
members.put(member.getId(), member); // 成功才更新快取
return true;
} catch (XmlFileWriteException ex) { return false; }
}
此順序保證快取與檔案一致性,避免寫入失敗時需回滾快取的複雜度。
根節點<members>,每筆資料對應<member id="...">含name、age子元素。loadMemberFromFile()啟動時將全量資料載入Hashtable快取;add/update/delete操作修改DOM樹後呼叫writeDocumentToFile()持久化。
public interface MemberFilter {
boolean accept(Member member);
}
// 使用範例
List<Member> adults = service.search(m -> m.getAge() >= 18);
搭配Collections.sort()實現記憶體內排序與篩選,效能足夠應付小規模資料。
此方案以快取為主、檔案為輔,單檔案XML適合萬筆以內資料,兼具開發效率與執行彈性,是中小型Java專案的務實之選。