天天看點

闡述Session加載實體對象的過程

Session加載實體對象的步驟是:

① Session在調用資料庫查詢功能之前,首先會在一級緩存中通過實體類型和主鍵進行查找,如果一級緩存查找命中且資料狀态合法,則直接傳回;

② 如果一級緩存沒有命中,接下來Session會在目前NonExists記錄(相當于一個查詢黑名單,如果出現重複的無效查詢可以迅速做出判斷,進而提升性能)中進行查找,如果NonExists中存在同樣的查詢條件,則傳回null;

③ 如果一級緩存查詢失敗則查詢二級緩存,如果二級緩存命中則直接傳回;

④ 如果之前的查詢都未命中,則發出SQL語句,如果查詢未發現對應記錄則将此次查詢添加到Session的NonExists中加以記錄,并傳回null;

⑤ 根據映射配置和SQL語句得到ResultSet,并建立對應的實體對象;

⑥ 将對象納入Session(一級緩存)的管理;

⑦ 如果有對應的攔截器,則執行攔截器的onLoad方法;

⑧ 如果開啟并設定了要使用二級緩存,則将資料對象納入二級緩存;

⑨ 傳回資料對象。