hibernateTemplate session關閉
1.雖然繼承了HibernateDaoSupport這個類,但是this.getSession(),獲得的session也要在使用後即使關閉,因為這個session是原生的session不是經過sping代理過的,並且還沒有事物管理,自動提交,自動關閉連線等功能,所以使用使用getSession()獲得session時一定要關閉。
2.使用getHibernateTemplate()中的1.exceute(callback) 2. executeFind(callback) 3.execute(callback, boolean)時一定要注意:1和2會點方法中使用的session都是經過spring代理過的會自動關閉,但是3最後一個引數標示的是:回撥函式中使用的session是否是本地的(沒有經過是spring代理過,沒有自動關閉連線的功能)。true:本地的 false:spring代理過的(不用但是session是否關閉)
3.spring的bean的預設管理都是單列模式,在ssh整合中保證各dao的的例項是無狀態的,佛則在一旦有某個方法設定狀態之後,別的方法也就有了狀態,但是別的方法又不需要這個狀態,或者對別的放產生了別的不好的影響:例如
getHibernateTemplate().setMaxResults(3);
一旦是給HibernateTemplate設定了最大輸出記錄數,那麼以後呼叫這個類中的別的方法的最大記錄數也就是3個,對別人呼叫這個類的別的方法產生的副作用,除非你再次設定你想要的最大記錄數,setMaxResults(10);
4,都說Spring 和 Hibernate是絕配。今天有點小小心得,拿出來共享一下。 當我們費了九牛二虎之力終於把環境全配好之後,有一個問題擺在面前: 如何訪問資料庫? 通過繼承HibernateDaoSupport我們有兩個選擇: getSession().createQuery("from Users"); getHibernateTemplate().find( "FROM Users); 用哪個呢?困惑啊。 網上找了找資料都是推薦用getHibernateTemplate,原因說的不是很清楚。 於是我做了如下測試: 分別迴圈呼叫getSession().createQuery("from Users");getHibernateTemplate().find( "FROM Users); 1000次 結果getSession()很快就包無法建立連線了。而getHibernateTemplate屁事沒有可以跑完。 通過後臺觀察,使用getSession會在資料庫中留下很多SQL*Net message from client的連線,終止測試後連線自動釋放。 而getHibernateTemplate則從頭到尾都使用一個連線。 難道是getSession()不會自動釋放連線? 於是我又分別迴圈呼叫getSession().createQuery("from Users");getHibernateTemplate().find( "FROM Users); 5次 發現當前端程式一結束, getSession的5個連線立刻就釋放了。結合前面1000次時終止測試後連線自動釋放,可以說明getSession()是 會自動釋放連線的。 結論: 1、getSession()和getHibernateTemplate都可以自動釋放連線(當然你的配置要正確),但是在一個執行緒內 getSession會get很多個session(就是開很多個會話、連線),很可能導致資料庫連線超過上限。所以推薦使用 getHibernateTemplate。 2、如果有些語句無法用getHibernateTemplate實現,可以使用getHibernateTemplate.execute使用 HibernateCallback回撥介面。 另:可以設定HibernateTemplate的AllowCreate為True,並在finally中關閉Session。也可以將true作為參 數傳遞到super.getSession(..)方法中取得Session。這樣也可以,就是麻煩點。 參見: http://springframework.org/docs/api/org/springframework/orm/hibernate3 /HibernateTemplate.html http://www.mxjava.com/blog/article.asp?id=246 請各位高手不吝賜教。 另:用myEclipse自動生成的HibernateDAO程式碼中。4.1.1版本的myEclipse自動生成的findById方法使用的是 getSession方法獲得連線, 不過在6.0中已經修改為使用getHibernateTemplate方法。5.0的沒有測試。 getSessionFactory().getCurrentSession()
相關文章
- database link 關閉session問題DatabaseSession
- OpenSessionInView裡的Session不能自動關閉?SessionView
- Session會在瀏覽器關閉後消失嗎???Session瀏覽器
- spring宣告式事務無法關閉sessionSpringSession
- 關於jdon的HibernateTemplate類的事務處理
- 關閉瀏覽器之後session是否就消失了???瀏覽器Session
- Spring中的HibernateTemplateSpring
- 關於sessionSession
- 怎麼做到關閉瀏覽器時,伺服器的session也清掉了?瀏覽器伺服器Session
- KILL SESSION 相關Session
- Hiberante問題:session關閉後如何獲得該物件的懶載入物件。Session物件
- Cookie與Session 關係CookieSession
- session與sessionStorage 關聯Session
- session和cookie關係SessionCookie
- 關於Session和CookieSessionCookie
- 關於session的管理Session
- 關閉網頁彈出是否關閉的提示網頁
- 【集合論】關係閉包 ( 關係閉包求法 | 關係圖求閉包 | 關係矩陣求閉包 | 閉包運算與關係性質 | 閉包複合運算 )矩陣
- win10關閉防火牆提示怎麼關閉_win10關閉防火牆提示徹底關閉操作方法Win10防火牆
- 網頁關閉網頁
- 批量關閉程式
- 安卓關閉fragment安卓Fragment
- 關閉selinuxLinux
- 關於session的問題Session
- 使用screen讓關閉ssh連線時不關閉程式
- ubuntu 關閉防火牆命令 ubuntu怎樣關閉防火牆Ubuntu防火牆
- 關閉應用程式時如何關閉子執行緒執行緒
- 小米手機怎麼關閉廣告?關閉廣告教程彙總
- keycloak~關於session idle和session max的解釋Session
- idea關閉coverageIdea
- webstorm關閉ESLintWebORMEsLint
- mui關閉側滑UI
- 關閉sql tunningSQL
- CentOS關閉防火牆CentOS防火牆
- 【easyUI】批量關閉tabsUI
- OpenSUSE關閉防火牆防火牆
- mysql關閉過程MySql
- js關閉視窗JS