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語句,使用查詢緩存的命中率就會高
查詢緩存(一)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Java项目面试实操 提升大厂面试成功率
wy53780
2020-04-23 14:14:04
玩转算法系列--图论精讲 面试升职必备(Java版)
wy53780
2020-04-23 14:03:23
玩转Java并发工具,精通JUC,成为并发多面手
wy53780
2020-04-23 13:56:08
线程八大核心+Java并发底层原理精讲(Java并发核心知识体系精讲)
wy53780
2020-04-23 13:55:55
Java通用型支付+电商平台双系统实战
wy53780
2020-04-23 13:54:42
【躍遷之路】【734天】程序員高效學習方法論探索系列(實驗階段491-2019.2.24)
Wall_Breaker
2019-02-24 23:25:10
Java是怎麼運行的?
勤思
2019-02-24 22:52:36
sql語法、關係建模
死瘦宅
2019-02-24 22:35:22
MySQL 事務、函數、觸發器、數據庫備份、權限管理
死瘦宅
2019-02-24 22:35:12
Python與家國天下
豌豆花下貓
2019-02-24 22:22:40
Java面試 | 002
Java貓說
2019-02-24 21:05:12
《從0到1學習Flink》—— Flink 讀取 Kafka 數據批量寫入到 MySQL
zhisheng
2019-02-24 21:04:11
Redis | 001能做什麼?
Java貓說
2019-02-24 21:03:51
java中具有繼承關係的類及其對象初始化順序
Linus脫襪子
2019-02-24 19:55:05