hibernate的緩存和CRUD_JSP教程
推薦:WML語(yǔ)言的基本情況用于WAP的標(biāo)記語(yǔ)言就是WML(Wireless Markup Language)。 WML的語(yǔ)法跟XML一樣,WML是XML的子集。 HTML、XML和WML的文件有很多相似之處,這樣網(wǎng)頁(yè)開(kāi)發(fā)者在過(guò)去10年中所學(xué)的東西今天依然適用。 WML頁(yè)面文件的后綴是 *.WML,就象HTML的 *.HTML后綴。 XML規(guī)定定義了一個(gè)規(guī)
hibernate作為一種現(xiàn)在比較流行的輕量級(jí)的ORM框架,2003年開(kāi)始在國(guó)內(nèi)流行,到目前來(lái)說(shuō)在做持久層上還是占有統(tǒng)治地位的。雖然說(shuō)豐富靈活的HQL和面對(duì)對(duì)象的Criteria查詢,把程序員從復(fù)雜繁瑣的JDBC中解放了出來(lái),但作為持久層的框架,它的性能才是最重要的核心問(wèn)題。而性能的核心在于緩存,由于最近在學(xué)習(xí)這些,所以就把自己的學(xué)到的一點(diǎn)東西拿來(lái)與大家分享,希望能起到拋磚引玉的效果。字體設(shè)計(jì)教程
在說(shuō)這些之前的先說(shuō)說(shuō)hibernate實(shí)體對(duì)象的三種狀態(tài):風(fēng)訊Cms教程
1.Transient:所謂Transient就是說(shuō)實(shí)體對(duì)象在內(nèi)存中自有存在,與數(shù)據(jù)庫(kù)中的記錄無(wú)關(guān)。
2.Persient:Persient對(duì)象對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一條記錄,也可以這樣理解,如果一個(gè)實(shí)體對(duì)象與某個(gè)session發(fā)生關(guān)聯(lián),并處于對(duì)應(yīng)session的有效期內(nèi),那它就處于Persient狀態(tài)。
3.Detached:所謂的Detached就是處于Persient狀態(tài)的對(duì)象對(duì)應(yīng)的session關(guān)閉之后的狀態(tài)。
我們平時(shí)所說(shuō)的PO(持久化對(duì)象)指的就是位于Persient狀態(tài)的對(duì)象,而VO(值對(duì)象)就是指Transient和Detached狀態(tài)的對(duì)象。
下面開(kāi)始說(shuō)CRUD
保存:hibernate中保存的方法很多我主要說(shuō)說(shuō)下面幾個(gè)
1.save()方法,調(diào)用save方法時(shí),首先會(huì)在session緩存中查找保存對(duì)象如果實(shí)體對(duì)象已經(jīng)處于Persient狀態(tài),直接返回,否在實(shí)行sql操作,并將保存的實(shí)體對(duì)象加入session緩存(save方法不會(huì)把實(shí)體加入二級(jí)緩存的),最后對(duì)存在的級(jí)聯(lián)關(guān)系進(jìn)行遞歸處理。
2.saveOrUpdate()方法:和save方法一樣首先在session緩存中查找,判斷對(duì)象是否為為保存狀態(tài),如果對(duì)象處于Persient,不執(zhí)行操作,處于Transient執(zhí)行save操作,處于Detached調(diào)用save將對(duì)象與session重新關(guān)聯(lián)。
這里要注意的是批量操作時(shí)要適時(shí)對(duì)session進(jìn)行flush操作避免OutOfMenoryError。
刪除:刪除我主要說(shuō)批量刪除,hibernate在進(jìn)行批量刪除前,首先必須將所有符合條件的數(shù)據(jù)加載到內(nèi)存中(這是所有ORM框架必須面對(duì)的問(wèn)題,這樣主要是為了對(duì)目前的內(nèi)部緩存和二級(jí)緩存中數(shù)據(jù)進(jìn)行整理,以保存和數(shù)據(jù)庫(kù)的一致性)這樣就面對(duì)這如果操作數(shù)據(jù)量過(guò)大,也會(huì)出現(xiàn)OutOfMenoryError,所以推薦使用迭代刪除。
修改:修改主要談?wù)剈pdate方法,update和前面的save一樣首先還是要進(jìn)行在內(nèi)部緩存中查找,要注意兩點(diǎn),
1.Persient狀態(tài)的實(shí)體對(duì)象調(diào)用update沒(méi)有任何作用,update的SQL將在session.flush()方法中執(zhí)行。
查詢:查詢是受緩存影響最大的,主要談一下以下幾種查詢
1.load和get:這兩者的區(qū)別主要是load會(huì)在二級(jí)緩存中查找,而get在內(nèi)部緩存中查找不到將跳過(guò)二級(jí)緩存直接進(jìn)行sql操作。
2.createQuery()的list()和iterate()方法,list()實(shí)際上無(wú)法使用緩存的,他對(duì)緩存只寫不讀,而ierate則是首先查找所有符合條件的數(shù)據(jù)id(首先在本地緩存中查找)在執(zhí)行相應(yīng)的select獲得對(duì)應(yīng)記錄,iterate方法的使用最好是查找的實(shí)體對(duì)象在緩存已經(jīng)存在,否則查詢性能較低,易產(chǎn)生N+1現(xiàn)象。
其實(shí)還有Query Cache但怕篇幅太長(zhǎng),讓人煩所以就就此停筆,其實(shí)緩存是一個(gè)很深問(wèn)題,也很值得研究。
分享:加快JDBC中JSP數(shù)據(jù)庫(kù)的訪問(wèn)速度JSP程序都是模塊,并且具有強(qiáng)大的表達(dá)-請(qǐng)求(divsentation-request)功能。 建立一個(gè)完美的數(shù)據(jù)庫(kù)訪問(wèn)是一個(gè)具有挑戰(zhàn)的過(guò)程,而JDBC接口能夠很好地完成這一過(guò)程。 然而,嵌入于JSP代碼中的JDBC代碼,與SQL命令嵌入在JDBC一樣,可以充分利用JSP的功能,為客戶端建立一個(gè)整
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實(shí)現(xiàn)
- 網(wǎng)頁(yè)模板:關(guān)于jsp頁(yè)面使用jstl的異常分析
- JSP頁(yè)面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項(xiàng)目中連接Access數(shù)據(jù)庫(kù)的配置方法
- JDBC連接Access數(shù)據(jù)庫(kù)的幾種方式介紹
- 網(wǎng)站圖片路徑的問(wèn)題:絕對(duì)路徑/虛擬路徑
- (jsp/html)網(wǎng)頁(yè)上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對(duì)路徑下的圖片解決方法
- 相關(guān)鏈接:
- 教程說(shuō)明:
JSP教程-hibernate的緩存和CRUD
。