apple0668
TDD,Agile,Scrum,Core Java,J2EE,Investment Blank
BlogJava
首頁
新隨筆
聚合
管理
隨筆-61 評論-159 文章-0 trackbacks-0
系統學習hibernate之十五:hibernate一級緩存
在hibernate中,由于一級緩存的生命周期跟Session的生命周期一樣,所以也可以理解為一級緩存是session緩存。
一、通過在做查詢的時候,有幾個查詢方法支持一級緩存,它們分別是:load(),get(),iterate(),其中要注意的是iterate方法只對實體對象查詢才支持一級緩存,如果使用iterate來查詢對象里面的相關屬性,則查詢的時候不支持一級緩存。
1、load()方法。
例子:
1
Student s
=
(Student)session.load(Student.
class
,
1
);
2
System.out.println(s.getName());
3
System.out.println(
"
---------------------
"
);
4
s
=
(Student)session.load(Student.
class
,
1
);
5
System.out.println(s.getName());
PS:只發出一條sql語句,雖然這里使用兩次load方法,但是第一次load方法對于id為1的記錄進行加載,到第3行才發出一條sql語句及符合的數據,這樣就把數據放在一級緩存里面,在第4行開始繼續使用load就從一級緩存里面抽取。
2、get()方法。
例子:
1
Student s
=
(Student)session.get(Student.
class
,
1
);
2
System.out.println(s.getName());
3
System.out.println(
"
---------------------
"
);
4
s
=
(Student)session.load(Student.
class
,
1
);
5
System.out.println(s.getName());
PS:跟1中load一樣,只發出一條sql語句。
3、iterate()方法查詢實體對象
例子:
1
Student student
=
(Student)session.createQuery(
"
from Student s where s.id=1
"
).iterate().next();
2
System.out.println(
"
student.name=
"
+
student.getName());
3
4
//
會發出查詢id的sql,不會發出查詢實體對象的sql,因為iterate使用緩存
5
student
=
(Student)session.createQuery(
"
from Student s where s.id=1
"
).iterate().next();
6
System.out.println(
"
student.name=
"
+
student.getName());
PS:總共發出3條sql語句,1、2行發出兩條語句,1條是查詢實體對象的sql,另一條是查詢實體對象的name屬性,由于使用一級緩存,之前1、2行查詢的實體存放在一級緩存里面,所以5、6行利用一級緩存里面的數據只發出一條查詢id的sql。
4、iterate()方法查詢實體對象屬性(不支持一級緩存)
例子:
1
String name
=
(String)session.createQuery(
"
select s.name from Student s where s.id=1
"
).iterate().next();
2
System.out.println(
"
student.name=
"
+
name);
3
4
//
iterate查詢普通屬性,一級緩存不會緩存,所以發出sql
5
//
一級緩存是緩存實體對象的
6
name
=
(String)session.createQuery(
"
select s.name from Student s where s.id=1
"
).iterate().next();
7
System.out.println(
"
student.name=
"
+
name);
PS:由于iterate()方法查詢實體對象屬性,一級緩存不會產生作用,所以發出兩條sql語句。
二、一級緩存是存在的,所以要更加合理的管理好,提高程序的效率,通常都是通過clear(),evict()方法來清除緩存,當不需要使用一級緩存或者是更加高效率使用一級緩存。
如果在一次性更新或者加入數量量比較大的情況下,更加要管理好一級緩存。
例子:
1
for
(
int
i
=
0
;i
<
10000
;i
++
)
2
{
3
Student s
=
new
Student();
4
s.setName(
"
s
"
+
i);
5
session.save(s);
6
if
(i
%
20
==
0
)
7
{
8
session.flush();
9
session.clear();
10
}
11
}
PS:在數據量比較大的情況下管理一級緩存的做法,一般都是設定一定數量的記錄給更新或者保存等操作之后,
避免一次性大量的實體數據入庫導致內存溢出
,所以才去先是用第8行的flush和第9行的clear方法來實現比較好的緩存管理。在數據量特別大的時候,可以使用jdbc來實現,因為hibernate不太適合于數據量特別大的場合使用,如果連jdbc都滿足不了數據量的效率要求,只好利用相關的數據庫機制來實現。
-------------------------------------------------------------------------------------------------
PS:本博客文章,如果沒有注明是有“轉”字樣,屬于本人原創。如果需要轉載,務必
注明作者
和
文章的詳細出處地址
,否則不允許轉載,多謝合作!
posted on 2008-10-31 23:39
apple0668
閱讀(802)
評論(0)
編輯
收藏
所屬分類:
hibernate
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
系統學習hibernate之十五:hibernate一級緩存
系統學習hibernate之十四:hibernate中HQL查詢語言(二)
系統學習hibernate之十三:hibernate中HQL查詢語言(一)
系統學習hibernate之十二:hibernate中悲觀鎖和樂觀鎖
系統學習hibernate之十一:set、list、map、array集合
系統學習hibernate之十:Component映射
系統學習hibernate之九:多對多關聯映射(雙向)
系統學習hibernate之八:多對多關聯映射(單向)
系統學習hibernate之七:一對多單向關聯
系統學習hibernate之六:一對一外鍵關聯映射雙向關聯
Email:
chensp1230@163.com
歡迎交流
框架是告訴人們不該去做什么,而不是告訴人們該去做什么;容器是告訴人們該去做什么,而不是告訴人們不該去做什么!
<
2008年10月
>
日
一
二
三
四
五
六
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
留言簿
(10)
給我留言
查看公開留言
查看私人留言
我參與的團隊
深圳Java俱樂部(0/0)
Netbeans 愛好者(0/0)
隨筆分類
(63)
Aglets(1)
drools(2)
eclipse(6)
groovy
hibernate(17)
java(7)
jboss
junit(3)
Log4(2)
MongoDB(1)
oracle(1)
spring(4)
struts2(8)
svn(1)
tomcat(4)
webwork(4)
web報表(1)
xml
心情港灣
集群(1)
隨筆檔案
(61)
2015年3月 (1)
2012年7月 (1)
2012年4月 (1)
2011年5月 (3)
2010年1月 (2)
2009年3月 (1)
2008年12月 (2)
2008年11月 (5)
2008年10月 (16)
2008年9月 (1)
2008年4月 (1)
2008年1月 (2)
2007年11月 (2)
2007年10月 (15)
2007年9月 (8)
友情鏈接
開源在線手冊
最新隨筆
1.?Ehcache集群方案
2.?MongoDB安裝手記
3.?任何人都可以重構<轉載>
4.?JDK6中JWS自帶webservice應用
5.?解決:Eclipse啟動tomcat 訪問不了 手動啟動可以訪問
6.?IntelliJ Idea10 常用快捷鍵
7.?Drools語法詳解<轉>
8.?eclipse3.4安裝drools插件手記
9.?Java日期時間運算
10.?java中使用功能強悍的正則表達式
搜索
最新評論
1.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
非常感謝樓主分享,解決問題, Tomcat 7.0.59
--Gozs
2.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記[未登錄]
正解
--gao
3.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
@123
已解決,謝謝提示myeclipse相關的有用信息~~
--sequoah
4.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
贊 清空work文件夾就可以了
--維尼
5.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
很好 問題解決了!
--兔兔
閱讀排行榜
1.?Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記(85541)
2.?系統學習hibernate之一:利用hibernate中的SchemaExport生成數據表(18641)
3.?eclipse的第一個struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2(15692)
4.?Subversion之路---實現精細的目錄訪問權限控制<轉>(11308)
5.?IntelliJ Idea10 常用快捷鍵(9321)
評論排行榜
1.?Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記(62)
2.?eclipse的第一個struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2(32)
3.?Tomcat啟動端口被占用異常處理(9)
4.?升級瑞星防火墻2008后,在myeclipse6.0中啟動tomcat遇到怪問題!(7)
5.?JDK6中JWS自帶webservice應用(6)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 apple0668
主站蜘蛛池模板:
图图资源网亚洲综合网站
|
日韩毛片无码永久免费看
|
国产成人精品日本亚洲专区
|
免费观看的毛片大全
|
亚洲经典在线中文字幕
|
69国产精品视频免费
|
亚洲一区二区三区首页
|
麻豆成人久久精品二区三区免费
|
国产一区二区三区在线观看免费
|
亚洲国产成+人+综合
|
91精品国产免费入口
|
国产亚洲av人片在线观看
|
国产成人精品免费大全
|
亚洲天堂免费在线视频
|
另类小说亚洲色图
|
亚洲国产精品丝袜在线观看
|
国产偷国产偷亚洲高清在线
|
成人亚洲网站www在线观看
|
国产精品亚洲综合网站
|
免费在线观看污网站
|
污网站在线免费观看
|
亚洲精品亚洲人成在线观看下载
|
九九免费精品视频在这里
|
亚洲国产成人久久一区WWW
|
一级做a爱过程免费视频高清
|
67194成手机免费观看
|
亚洲娇小性xxxx
|
午夜a级成人免费毛片
|
亚洲AV女人18毛片水真多
|
一本色道久久88亚洲综合
|
最近国语视频在线观看免费播放
|
亚洲永久永久永久永久永久精品
|
最近中文字幕国语免费完整
|
亚洲一区精品视频在线
|
无码一区二区三区AV免费
|
色婷婷亚洲一区二区三区
|
中文字幕中韩乱码亚洲大片
|
久久精品免费电影
|
亚洲人成777在线播放
|
国产精品色午夜免费视频
|
中文字幕在线免费视频
|