一千萬個為什麽

搜索

在JSP中使用sqls - 最佳實踐是什麽?


說,你有一個應用程序列出你的應用程序中的用戶。理想情況下,如果你正在用Java編寫代碼來實現這一點,不管你的UI層是什麽,我會認為你會編寫代碼從數據庫中檢索結果集並將其映射到應用程序對象。因此,在這種情況下,您正在查看您的ORM /數據層正在做它的事情並創建一個“User”對象列表。

假設你的User對象如下所示:

public class User {

      private String userName;
      private int    userid;
}

您現在可以在任何UI中使用這個“用戶”對象列表。 (Swing/Webapp)。 現在,設想一個場景,在這裏你必須列出userName和say,count等部分或者其他內容,這是一個webapp中非常具體的屏幕。所以你正在尋找這樣的對象結構:

public class UserViewBean {

            private String userName;
            private int    countDepartments;
}

這樣做的最簡單方法是在一個查詢中編寫用於檢索部門計數和用戶名的SQL。如果我你寫這樣的查詢,你會在哪裏有這個查詢?在你的jsp?但是,如果你在MVC框架中這樣做,你會把這個查詢移動到你的數據層,得到結果集,將它轉換為UserViewBean並將它發送到請求範圍內的jsp?如果你直接在jsps中寫入查詢/如果你直接在JSP中使用連接,這不是一種壞習慣嗎?

我知道,你們中的一些人可能會說,'嘿,你的目標構成錯了!如果部門鏈接到用戶,你會想在你的用戶對象中創建一個部門列表' - 是的,我同意。但是,想一想這個場景 - 比方說,除了這一個屏幕,我不需要這個部門統計信息在我的應用程序中的任何其他地方。你是說,無論我從數據庫加載用戶對象,我都必須加載一個依賴對象列表,即使我不會使用它們?您的對象圖將獲得所有關系完整性多久?是的,我知道你有這樣的ORMs,所以你可以從懶惰加載和東西中獲益,但是我沒有權限使用它。

這裏的底線問題是:

  • 你會組成一個貧血的對象嗎? 迎合你的看法和作出 您的業​​務層將返回此 這個屏幕的對象 - 只是為了制作 它看起來有點OOish?

  • 不管你的屏幕是什麽 要求,你會編寫你的 對象,使得一個對象圖 被加載,你會得到的 該列表的大小?

這裏最好的做法是什麽?

最佳答案

我永遠不會把SQL放入JSP中。我將使用Spring MVC或Struts控制器或servlet來包含所有這類邏輯。它允許更好的錯誤處理(在查詢失敗時可以轉發到錯誤頁面)。

如果您確實必須這樣做,請使用 JSTL SQL標記</一>。

轉載註明原文: 在JSP中使用sqls - 最佳實踐是什麽?

猜你喜歡