查詢緩存(一)

1.查詢緩存 在使用外鏈接進行查詢時須要注意查詢緩存的使用    hibernate的xml配置文件,當一對多中配置抓取策略爲join時        <set inverse="true" access="field" name="childern" fetch="join" cascade="save-update,persist" >       <key column="PID"/>       <one-to-many class="com.going.platform.model.Organization"/>     </set>            String hsql=" from Organization  porg left outer join fetch porg.childern as corg ";    List<Organization> results=super.getSession().createQuery(hsql).setCacheable(true).list();    進行查詢時  第一次查詢會使用外鏈接的方式來進行查詢,查詢的sql語句       select         this_.ID as ID0_1_,         this_.ORGANIZATION_NAME as ORGANIZA2_0_1_,         this_.ORGANIZATION_SN as ORGANIZA3_0_1_,         this_.DESCRIPTION as DESCRIPT4_0_1_,         this_.PID as PID0_1_,         this_.ORGANIZATION_TEL as ORGANIZA6_0_1_,         this_.ORDER_NUM as ORDER7_0_1_,         this_.PERSON_ID as PERSON8_0_1_,         childern2_.PID as PID3_,         childern2_.ID as ID3_,         childern2_.ID as ID0_0_,         childern2_.ORGANIZATION_NAME as ORGANIZA2_0_0_,         childern2_.ORGANIZATION_SN as ORGANIZA3_0_0_,         childern2_.DESCRIPTION as DESCRIPT4_0_0_,         childern2_.PID as PID0_0_,         childern2_.ORGANIZATION_TEL as ORGANIZA6_0_0_,         childern2_.ORDER_NUM as ORDER7_0_0_,         childern2_.PERSON_ID as PERSON8_0_0_     from         g_organization this_     left outer join         g_organization childern2_             on this_.ID=childern2_.PID                但配置了查詢緩存 第二次點擊時 則會產生以下sql語句           select         organizati0_.ID as ID0_1_,         organizati0_.ORGANIZATION_NAME as ORGANIZA2_0_1_,         organizati0_.ORGANIZATION_SN as ORGANIZA3_0_1_,         organizati0_.DESCRIPTION as DESCRIPT4_0_1_,         organizati0_.PID as PID0_1_,         organizati0_.ORGANIZATION_TEL as ORGANIZA6_0_1_,         organizati0_.ORDER_NUM as ORDER7_0_1_,         organizati0_.PERSON_ID as PERSON8_0_1_,         childern1_.PID as PID3_,         childern1_.ID as ID3_,         childern1_.ID as ID0_0_,         childern1_.ORGANIZATION_NAME as ORGANIZA2_0_0_,         childern1_.ORGANIZATION_SN as ORGANIZA3_0_0_,         childern1_.DESCRIPTION as DESCRIPT4_0_0_,         childern1_.PID as PID0_0_,         childern1_.ORGANIZATION_TEL as ORGANIZA6_0_0_,         childern1_.ORDER_NUM as ORDER7_0_0_,         childern1_.PERSON_ID as PERSON8_0_0_     from         g_organization organizati0_     left outer join         g_organization childern1_             on organizati0_.ID=childern1_.PID     where         organizati0_.ID=? Hibernate:     select         organizati0_.ID as ID0_1_,         organizati0_.ORGANIZATION_NAME as ORGANIZA2_0_1_,         organizati0_.ORGANIZATION_SN as ORGANIZA3_0_1_,         organizati0_.DESCRIPTION as DESCRIPT4_0_1_,         organizati0_.PID as PID0_1_,         organizati0_.ORGANIZATION_TEL as ORGANIZA6_0_1_,         organizati0_.ORDER_NUM as ORDER7_0_1_,         organizati0_.PERSON_ID as PERSON8_0_1_,         childern1_.PID as PID3_,         childern1_.ID as ID3_,         childern1_.ID as ID0_0_,         childern1_.ORGANIZATION_NAME as ORGANIZA2_0_0_,         childern1_.ORGANIZATION_SN as ORGANIZA3_0_0_,         childern1_.DESCRIPTION as DESCRIPT4_0_0_,         childern1_.PID as PID0_0_,         childern1_.ORGANIZATION_TEL as ORGANIZA6_0_0_,         childern1_.ORDER_NUM as ORDER7_0_0_,         childern1_.PERSON_ID as PERSON8_0_0_     from         g_organization organizati0_     left outer join         g_organization childern1_             on organizati0_.ID=childern1_.PID     where         organizati0_.ID=?                 我的認爲是,hibernate中會得出擁有子節點的數據id、,而後根據Id進行外鏈接進行查詢       但若是取消查詢緩存的話 每次都會調用同一語句       select         this_.ID as ID0_1_,         this_.ORGANIZATION_NAME as ORGANIZA2_0_1_,         this_.ORGANIZATION_SN as ORGANIZA3_0_1_,         this_.DESCRIPTION as DESCRIPT4_0_1_,         this_.PID as PID0_1_,         this_.ORGANIZATION_TEL as ORGANIZA6_0_1_,         this_.ORDER_NUM as ORDER7_0_1_,         this_.PERSON_ID as PERSON8_0_1_,         childern2_.PID as PID3_,         childern2_.ID as ID3_,         childern2_.ID as ID0_0_,         childern2_.ORGANIZATION_NAME as ORGANIZA2_0_0_,         childern2_.ORGANIZATION_SN as ORGANIZA3_0_0_,         childern2_.DESCRIPTION as DESCRIPT4_0_0_,         childern2_.PID as PID0_0_,         childern2_.ORGANIZATION_TEL as ORGANIZA6_0_0_,         childern2_.ORDER_NUM as ORDER7_0_0_,         childern2_.PERSON_ID as PERSON8_0_0_     from         g_organization this_     left outer join         g_organization childern2_             on this_.ID=childern2_.PID     來進行查詢。。。。     得出結論就是在使用外鏈接時,應該注意到並非全部條件不會變化的sql語句,使用查詢緩存的命中率就會高   
相關文章
相關標籤/搜索