日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

JavaEE笔记(五)

發(fā)布時間:2025/6/17 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaEE笔记(五) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

version 必須配置在id后面

緩存文件在映射文件后面

一級緩存:session回話級別

Session緩存的作用

(1)減少訪問數(shù)據(jù)庫的頻率。應(yīng)用程序從內(nèi)存中讀取持久化對象的速度顯然比到數(shù)據(jù)庫中查詢數(shù)據(jù)的速度快多了,因此Session的緩存可以提高數(shù)據(jù)訪問的性能。

(2)保證緩存中的對象與數(shù)據(jù)庫中的相關(guān)記錄保持同步。當(dāng)緩存中持久化對象的狀態(tài)發(fā)生了變化,Session并不會立即執(zhí)行相關(guān)的SQL語句,這使得Session能夠把幾條相關(guān)的SQL語句合并為一條SQL語句,以便減少訪問數(shù)據(jù)庫的次數(shù),從而提高應(yīng)用程序的性能。


Session的清理緩存

清理緩存是指按照緩存中對象的狀態(tài)的變化來同步更新數(shù)據(jù)庫,下面我們還是具體來看一段代碼:以下程序代碼對Customer的name屬性修改了兩次:

tx = session.beginTransaction(); Customer customer=(Customer)session.load(Customer.class, new Long(1)); customer.setName("Jack"); customer.setName("Mike"); tx.commit();

當(dāng)Session清理緩存時,只需執(zhí)行一條update語句:

update CUSTOMERS set NAME= ‘Mike’…… where ID=1;

其實(shí)第一次調(diào)用setName是無意義的,完全可以省略掉。

Session緩存在什么時候才清理呢?我們來看一下:

Session會在下面的時間點(diǎn)清理緩存:

1. 當(dāng)應(yīng)用程序調(diào)用org.hibernate.Transaction的commit()方法的時候,commit()方法先清理緩存,然后再向數(shù)據(jù)庫提交事務(wù)。

2. 當(dāng)應(yīng)用程序顯式調(diào)用Session的flush()方法的時候,其實(shí)這個方法我們幾乎很少用到,因?yàn)槲覀円话愣际窃谕瓿梢粋€事務(wù)才去清理緩存,提交數(shù)據(jù)更改,這樣我們直接提交事務(wù)就可以。

二級緩存:sessionFactory工廠級別

二級緩存插件EHCache的 jar 包及配置文件

在hibernate.cfg.xml文件中進(jìn)行配置

<!-- 配置啟用 hibernate 的二級緩存 --> <property name="cache.use_second_level_cache">true</property> <!-- 配置hibernate二級緩存使用的產(chǎn)品 --> <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> <!-- 配置對哪些類使用 hibernate 的二級緩存 --> <class-cache usage="read-write" class="com.atguigu.hibernate.entities.Employee"/>

集合級別的二級緩存的配置

<collection-cache usage="read-write" collection="com.atguigu.hibernate.entities.Department.emps"/> <!-- 也可以在 .hbm.xml 文件中進(jìn)行配置 --> <set name="emps" table="GG_EMPLOYEE" inverse="true" lazy="true"> <cache usage="read-write"/> <key> <column name="DEPT_ID" /> </key> <one-to-many class="com.atguigu.hibernate.entities.Employee" /> </set> <!-- 注意: 還需要配置集合中的元素對應(yīng)的持久化類也使用二級緩存! 否則將會多出 n 條 SQL 語句. --> <class-cache usage="read-write" class="com.atguigu.hibernate.entities.Employee"/>

二級緩存的清除

1:調(diào)用evict()方法;

2:關(guān)閉SessionFacotry;

轉(zhuǎn)載于:https://www.cnblogs.com/HackerBlog/p/6102706.html

總結(jié)

以上是生活随笔為你收集整理的JavaEE笔记(五)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。