開發 J2EE 應用時,需將業務信息(如產品目錄、用戶數據)映射到數據庫表。本文介紹一種將數據庫相關類劃分為實體類與會話類的設計模式:
此模式使程序模塊化,便於開發維護。
class Book {
protected int ID;
protected String Name;
protected String ISBN;
protected String Author;
protected int PublisherID;
protected double Price;
protected int Volume;
// 構造函數、get/set 方法省略
}
同理可封裝 Publisher 表。實體實例為內存中記錄的映射,操作不直接反映到數據庫。
class BookTable {
void Add(Book book);
void Delete(Book book);
void Update(Book book);
Collection findByID(int id);
Collection findByPublisherName(String name);
// 其他查找方法...
}
多表操作可封裝專門類,或在會話類中添加關聯查詢方法(如 findByPublisherName 返回 Book 集合)。
關閉 auto-commit 模式,手動控制提交:
con.setAutoCommit(false);
PreparedStatement ps1 = con.prepareStatement("UPDATE COFFEES SET SALES=? WHERE COF_NAME LIKE ?");
ps1.setInt(1, 50); ps1.setString(2, "Colombian"); ps1.executeUpdate();
PreparedStatement ps2 = con.prepareStatement("UPDATE COFFEES SET TOTAL=TOTAL+? WHERE COF_NAME LIKE ?");
ps2.setInt(1, 50); ps2.setString(2, "Colombian"); ps2.executeUpdate();
con.commit();
con.setAutoCommit(true);
使用 JTA 調用底層 JTS 處理分布式事務;若用 EJB,可在部署描述符中聲明事務屬性。具體細節請參考 J2EE 規範。
EJB 適合分布式系統,容器管理事務、安全等底層服務,開發者專注業務邏輯。但非分布式場景下,EJB 呼叫開銷大,可能嚴重降低性能。本文重點探討非 EJB 環境下的實現方案。