首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

EJB 中直接使用 JDBC 與 RowSet 讀取資料:突破 Entity Bean 效能瓶頸

     編輯:Java 相關知識

痛點:Entity Bean 讀取大量唯讀資料的三大代價

  1. N+1 問題:Finder 1 次 + 每個 Entity Bean `ejbLoad` N 次 = N+1 次 DB 往返。
  2. 遠端呼叫爆炸:每個 Bean 透過 Remote Interface 獲取資料,網路開銷巨大。
  3. 簡單 Join 變重構:多表關聯需實例化大量 Bean、處理關係維護,擴展性極差。

解決方案:Session Facade + JDBC + CachedRowSet

  • 在 Session Bean 中直接用 JDBC 執行 SQL 查詢。
  • 將 `ResultSet` 複製到 `CachedRowSet`(離線、可序列化)。
  • 直接將 `RowSet` 傳回客戶端,對應表格行列,無需轉換為 Value Object。

RowSet 優勢

  • 統一查詢介面,支援離線操作。
  • 單次 DB 往返取回所有資料,無事務過載。
  • 客戶端直接操作欄位(`getString("col")`),無需中間 DTO 層。

代價與限制

優點缺點
查詢效能極佳業務邏輯與持久邏輯緊耦合(SQL 散落業務層)
減少網路往返非 OO,編譯期無法檢查 SQL
簡化代碼層次維護性較差,易產生 Bug

關鍵原則:讀寫分離策略

唯讀列表查詢 → JDBC + RowSet
業務更新/驗證/關聯維護 → Entity Bean

  • RowSet 雖支援更新,**嚴禁**在應用中用於更新操作。
  • 更新涉及業務規則、驗證、關聯級聯,必須由封裝規則的 Entity Bean 執行。
  • 此模式與 Value Object、Generic Attribute Access 不相容,專為「大量唯讀顯示」優化。

適用場景判斷

  • 報表、清單、下拉選項等**唯讀、大量、頻繁**查詢。
  • 客戶端僅需表格化顯示,無複雜業務互動。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved