典型代碼片段
public String list() {
int size = 7;
User user = (User) getSession().getAttribute("curr_user");
int userId = user.getId();
Page<Diary> page = dairyService.find(size, number,
"from Diary where user.id = ?", userId); // 建議使用參數綁定
put2Request("page", page);
return "list";
}
常見問題與修正
- HQL 寫法錯誤:原代碼
from Dairy where user_id = ID 中 user_id 可能不是實體屬性名。正確寫法應根據實體關聯映射,如 user.id 或 user.id = :uid。
- 參數傳遞方式:避免直接拼接 SQL/HQL 字串,使用
? 佔位符或命名參數 :uid,由框架處理類型轉換與注入防護。
- 實體類名拼寫:確認實體類是
Diary 而非 Dairy(牛奶廠),HQL 中需使用實體類名。
- Session 取值安全:建議先判空
if (user != null),避免空指針異常。
最佳實踐建議
- 在 Service 層封裝查詢邏輯,Controller 僅負責參數傳遞與結果封裝。
- 使用分頁插件(如 PageHelper)簡化分頁代碼。
- 考慮加入緩存策略減少資料庫壓力。