成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

輕松解讀Hibernate一級緩存

開發 后端
在Hibernate中,由于一級Hibernate緩存的生命周期跟Session的生命周期一樣,所以也可以理解為一級Hibernate緩存是session緩存。

在學習Hibernate中,我們都知道由于一級Hibernate緩存的生命周期跟Session的生命周期一樣,所以也可以理解為一級Hibernate緩存是session緩存。

一、通過在做查詢的時候,有幾個查詢方法支持一級Hibernate緩存,它們分別是: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()); 

只發出一條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()); 

跟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()); 

總共發出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); 

由于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.            } 

在數據量比較大的情況下管理一級緩存的做法,一般都是設定一定數量的記錄給更新或者保存等操作之后,避免一次性大量的實體數據入庫導致內存溢出,所以才去先是用第8行的flush和第9行的clear方法來實現比較好的緩存管理。

在數據量特別大的時候,可以使用jdbc來實現,因為hibernate不太適合于數據量特別大的場合使用,如果連jdbc都滿足不了數據量的效率要求,只好利用相關的數據庫機制來實現。

【編輯推薦】

  1. 簡述Hibernate中加載并存儲對象
  2. Hibernate傳播性持久化攻略
  3. 深入了解Hibernate自動狀態檢測
  4. Hinerbate單端關聯代理頗析
  5. 教你如何在Hibernate中實例化集合和代理
責任編輯:仲衡 來源: blogjava
相關推薦

2009-09-23 09:37:07

Hibernate緩存

2009-08-13 17:50:49

Hibernate 3

2009-09-21 17:09:38

Hibernate C

2012-02-03 11:31:33

HibernateJava

2019-07-29 11:00:56

MyBatis緩存SQL

2022-08-31 09:47:38

ORM緩存持久化

2009-06-18 15:24:35

Hibernate二級

2009-09-21 14:59:31

Hibernate二級

2009-09-24 11:04:56

Hibernate二級

2009-06-30 14:08:00

Hibernate緩存

2009-06-18 14:51:12

Hibernate緩存Hibernate

2009-09-21 13:31:10

Hibernate 3

2009-09-21 14:39:40

Hibernate二級

2012-02-08 11:01:53

HibernateJava

2009-09-23 17:03:08

Hibernate S

2009-06-29 08:48:41

Hibernate緩存

2009-07-02 09:23:27

Hibernate緩存

2009-09-25 14:20:28

Hibernate繼承映射

2009-09-25 09:46:02

Hibernate高級

2009-09-22 10:09:21

Hibernate S
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 蜜月va乱码一区二区三区 | www.99热这里只有精品 | 一级a性色生活片久久毛片 午夜精品在线观看 | 伊人精品在线 | 欧美黄色一区 | 欧美一区二区在线 | 狠狠做深爱婷婷综合一区 | 日本成人在线网址 | 国产 欧美 日韩 一区 | 自拍偷拍3p | 日韩免| 91久久久久久久久久久久久 | 91在线网 | h在线观看| 欧美精品久久 | 国产色在线 | 一级免费在线视频 | 91色视频在线观看 | 亚洲第一av | 国产色播av在线 | 亚洲精品久久久蜜桃 | 欧美视频成人 | 91国内产香蕉 | 精品国产三级 | 国产精品久久久久久久岛一牛影视 | 国产在线精品一区二区三区 | 亚洲一区二区免费看 | 精品在线观看一区二区 | 中文字幕视频在线免费 | 日本色高清 | 91国内在线观看 | 国产精品视频在线观看 | 久草免费在线视频 | 国产成人网| 九九久久精品视频 | 国产欧美一区二区三区免费 | 成人做爰www免费看视频网站 | 亚洲精品电影在线观看 | 亚洲精品日日夜夜 | 成人性生交大片免费看r链接 | 欧美黑人体内she精在线观看 |