91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hibernate一級緩存是什么

發布時間:2021-12-04 16:25:05 來源:億速云 閱讀:189 作者:iii 欄目:編程語言

本篇內容介紹了“Hibernate一級緩存是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

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

一、通過在做查詢的時候,有幾個查詢方法支持一級Hibernate緩存,它們分別是:load(),get(),iterate(),其中要注意的是iterate方法只對實體對象查詢才支持一級緩存,如果使用iterate來查詢對象里面的相關屬性,則查詢的時候不支持一級緩存。

1、load()方法。

例子:

Student s = (Student)session.load(Student.class, 1);              System.out.println(s.getName());              System.out.println("---------------------");              s = (Student)session.load(Student.class, 1);             System.out.println(s.getName());

只發出一條sql語句,雖然這里使用兩次load方法,但是***次load方法對于id為1的記錄進行加載,到第3行才發出一條sql語句及符合的數據,這樣就把數據放在一級緩存里面,在第4行開始繼續使用load就從一級緩存里面抽取。

2、get()方法。

例子:

Student s = (Student)session.get(Student.class, 1);              System.out.println(s.getName());             System.out.println("---------------------");              s = (Student)session.load(Student.class, 1);              System.out.println(s.getName());

跟1中load一樣,只發出一條sql語句。

3、iterate()方法查詢實體對象

例子:

Student student = (Student)session.createQuery("from Student s where s.id=1").iterate().next();             System.out.println("student.name=" + student.getName());                            //會發出查詢id的sql,不會發出查詢實體對象的sql,因為iterate使用緩存             student = (Student)session.createQuery("from Student s where s.id=1").iterate().next();             System.out.println("student.name=" + student.getName());

總共發出3條sql語句,1、2行發出兩條語句,1條是查詢實體對象的sql,另一條是查詢實體對象的name屬性,由于使用一級緩存,之前1、2行查詢的實體存放在一級緩存里面,所以5、6行利用一級緩存里面的數據只發出一條查詢id的sql。

4、iterate()方法查詢實體對象屬性(不支持一級緩存)

例子:

String name = (String)session.createQuery("select s.name from Student s where s.id=1").iterate().next();              System.out.println("student.name=" + name);                            //iterate查詢普通屬性,一級緩存不會緩存,所以發出sql              //一級緩存是緩存實體對象的              name = (String)session.createQuery("select s.name from Student s where s.id=1").iterate().next();              System.out.println("student.name=" + name);

由于iterate()方法查詢實體對象屬性,一級緩存不會產生作用,所以發出兩條sql語句。

二、一級緩存是存在的,所以要更加合理的管理好,提高程序的效率,通常都是通過clear(),evict()方法來清除緩存,當不需要使用一級緩存或者是更加高效率使用一級緩存。

如果在一次性更新或者加入數量量比較大的情況下,更加要管理好一級緩存。

例子:

for(int i=0;i<10000;i++)              {                  Student s = new Student();                  s.setName("s"+i);                  session.save(s);                  if(i%20==0)                  {                      session.flush();                      session.clear();                 }             }

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

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

“Hibernate一級緩存是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

惠州市| 伊通| 营口市| 兴宁市| 梧州市| 罗定市| 舞钢市| 文登市| 香港| 墨玉县| 合川市| 荥阳市| 辉南县| 商洛市| 延寿县| 宜城市| 中西区| 凭祥市| 琼结县| 南皮县| 威海市| 衡阳市| 湘潭市| 泰州市| 汾阳市| 海伦市| 汽车| 武山县| 铜川市| 雷山县| 宁南县| 烟台市| 长治县| 商洛市| 齐河县| 满洲里市| 健康| 周口市| 彰化市| 公安县| 元氏县|