-2
我已經從數據庫查詢的頁面上獲取數據。執行時間太慢。該頁面需要太多時間才能呈現。如何加快速度?存儲過程不是一個理想的解決方案。執行CriteriaQuery太慢
<p:dataTable var="abc" value="#{abc.getValues()}">...
getValues(){
return ...createQuery(query);
}
我已經從數據庫查詢的頁面上獲取數據。執行時間太慢。該頁面需要太多時間才能呈現。如何加快速度?存儲過程不是一個理想的解決方案。執行CriteriaQuery太慢
<p:dataTable var="abc" value="#{abc.getValues()}">...
getValues(){
return ...createQuery(query);
}
在由JSF觸發的getter方法中執行數據庫查詢(或任何繁重的處理)是一個壞主意。如果您在getValues
方法中使用日誌記錄語句,則可能會看到它被多次調用。正因爲如此,getters應該只是getter,數據應該被預加載。
我看到您正在使用Primefaces。它帶來了一個偉大的設施來做到這一點 - LazyDataModel
。看看the according showcase。從Primefaces 3.4開始,您可以將dataTable
綁定到LazyDataModel
的緩存字段。
相關:http://stackoverflow.com/questions/2090033/why-jsf-calls-getters-multiple-times/2090062#2090062 – BalusC