JpaDaoSupport的用法是怎麼樣的?
使用JpaDaoSupport需要什麼jar包,JpaDaoSupport和jdbcDaoSupport的用法有什麼區別
開源技術一旦涉及整合,就會互相影響,Spring 和 Hibernate 是個典型。
鑒於 hibernate 實現了 JPA 規範,就不再贅述 JpaDaoSupport、JpaTemplate
下面以 HibernateDaoSupport、HibernateTemplate 為例同時解釋。Spring 提供 HibernateDaoSupport、HibernateTemplate 的初衷是:- 提供 common dao operation method (通用數據操作方法),方便快速開發
- 你的 dao 可以 extends xxxDaoSupport 獲取繼承來的便利方法
- 你的 dao 可以 autowire xxxTemplate 獲取注入來的便利方法
- 以上兩種方式本質是相同的
- 管理 hibernate 的 session
- hibernate 3.0.1 之前,並沒有提供會話管理方案,所以
- Spring 不得已在 HibernateDaoSupport、HibernateTemplate 中提供了支持
- 通過 HibernateDaoSupport、HibernateTemplate 獲取到的 session,可以無縫綁定 spring 管理的事務
- 對持久層異常自動轉化
- 雖然 hibernate 將底層異常封裝為 HibernateException 實現了大一統,但 Spring 顯然是更希望將任何持久層異常(不單單限定於 HibernateException)封裝為自己的 DataAccessException 實現大一統
但是,以上,在 hibernate 3.0.1 出現後,都成了歷史。
不負眾望,hibernate 在 3.0.1 後實現了會話管理(contextual session),對應地,Spring 在 HibernateDaoSupport、HibernateTemplate 的 javadoc 中也做了如下更新:Spring Reference 中也聲明如下:總結一下,如果使用的是 Hibernate 3.0.1+,現在 Spring 推薦這麼做:- Dao 不要再繼承 HibernateDaoSupport 或注入 HibernateTemplate,這兩個類都已不推薦使用
- Dao 應該直接注入 Hibernate 的 SessionFactory
這麼做的好處是:
- Dao 層代碼僅依賴於 hibernate api, 但不依賴於 spring api,這樣更合理,畢竟 hibernate 才是持久層功能的提供者
- Dao 內可以通過 SessionFactory.getCurrentSession() 來進行純 hibernate 操作,獲取到的 Session 也是受管理的(managed),至於管理方案,可以通過如下方式進行配置
- 先配置 hibernate ,然後整合到 spring 配置里
hibernate.cfg.xml
&
&
&
&
&
name="current_session_context_class"&>thread&
&
&
applicationContext.xml
name="configLocation"&>&
&
&
&
&
- 直接配置 Spring 提供的 LocalSessionFactoryBean
name="hibernateProperties" &> key="hibernate.show_sql"&>true&
& key="hibernate.current_session_context_class"&>thread&
&
&
&&
&
&
&
- 使用 JpaDaoSupport 需要什麼jar包?
開源技術的整合,依賴問題比較嚴重,建議使用 maven 進行管理,參考依賴如下:
&
&
&
&hibernate-entitymanager&
&
&
&
&
&
&spring-orm&
&
&
- JpaDaoSupport 和 jdbcDaoSupport 的用法有什麼區別
- 使用方式
- Spring 提供的 xxxDaoSupport 都是需要繼承來使用的
- Spring 提供的 xxxTemplate 都是需要注入來使用的
- xxxDaoSupport、xxxTemplate 本質相同,建議看 xxxDaoSupport 源碼
- 一般來說,組合(注入)優先於繼承,即便要用,注入使用比較好
- 使用區別
- JpaDaoSupport 基於 JPA,jdbcDaoSupport 基於 JDBC,用法沒有可比性。
- JPA
- 參考書:《Java Persistence with JPA - Daoqi Yang》
- 搭配 Hibernate Manual 做參照
- JDBC + Spring
- 參考書:《Just.Spring.Data.Access - Madhusudhan.Konda》
- 搭配 Spring Reference - 18. Data access with JDBC
- Spring Reference - 13.3.2 Implementing DAOs based on plain Hibernate 3 API
- Hibernate Manual - 2.5 Contexual Session
- 我的其他回答:
- spring有什麼缺點嗎? - Night Silent 的回答
- 哪些企業或項目在用Spring boot,或者它會在多大程度上替代Spring? - Night Silent 的回答
- 會計轉行從事IT,如何在一年時間內全職學習? - Night Silent 的回答
- SpringDataJPA持久層問題? - Night Silent 的回答
- spring4+hibernate4 事務管理 非常難受的問題 ? - Night Silent 的回答
- spring 中為何存在import註解,同一個包中的類直接使用就行了 用import註解感覺有點怪? - Night Silent 的回答
- 更多回答,請關注我,獲取最新動態
- 如果此回答幫到了你,一個小小的贊,一次分享,都會讓更多人受益
- 一號群:151280557(即將滿額):二維碼頁面 (二維碼自動識別)
- 二號群:521909033(新群,限時免費加入): 二維碼頁面 (二維碼自動識別)
如果覺得我的回答對你很有幫助,可以考慮微信打賞:
關於群的說明:
- 長期以來,我創建的自學群飽受各種培訓機構、群宣水軍、拿來主義者侵擾,為保持本群的技術氛圍,本群入群方式修改為付費入群
- 已經在群內的各位成員,請珍惜這個平台,一旦違反群規總是討論和 Java 無關話題的,將被清理出群,再次進群,你只能付費,不守規矩是有代價的
- 新入群的朋友,請先查閱群公告,了解下群規,入群後,歡迎有準備的提問,拒絕拿來主義
- 入群所需費用,會被充當群費
- 如果有朋友覺得本群/本篇文章幫到了你,也可以聯繫我(Q或知乎私信),為本群捐贈群費,我會在公告里向大家公示數額及用途
- 群費用途:為大家合購教程、為群續費、由我牽頭做一些特定的事情(投票決定)等等
- 再次重申:培訓機構、群宣水軍、拿來主義者,請自覺遠離
推薦閱讀:
TAG:Struts2 | Spring | JavaEE | JavaWeb | Hibernate3 |