歡迎您光臨本站
首頁
首頁
Web
移動
前端
編程
資料庫
伺服器
互聯網
操作系統
分類
>
資料庫
>
Spring 使用資料庫(資料庫交互處置)
tags: 時間:2014-03-22 12:31:00
Spring 使用資料庫(資料庫交互處理)
Spring里的數據處理多數採用「模板方法」模式
針對不同的對象/關係映射框架提供的模板有JdbcTemplate、HibernateTemplate、SimpleJdbcTemplate等很多模板。
使用模板的兩種方法:
1)、將其配置為Spring上下文里的Bean,然後將其織入到程序的DAO。
2)、使用Spring的DAO支持類進一步簡化程序DAO。【DAO支持類派生出自己的DAO類:在編寫自己的DAO實現時,可以繼承DAO支持類,然後調用模板獲取方法來直接訪問底層的數據訪問模板。例如程序DAO繼承了JdbcDaoSupport,那麼只需調用getJdbcTemplate()方法就可以獲得一個JdbcTemplate來使用。另外每個DAO支持類都能訪問它與資料庫進行通信所有的類,例如JdbcDAOSupport.getConnection()獲得鏈接。DAO支持類舉例:JdbcDAOSupport、HibernateDAOSupport、simpleJdbcDAOSupport等】
Spring的大多數持久支持選項依賴於數據源,首先需要配置Spring數據源,無論什麼DAO支持類,都需先陪這個。
數據源獲得的幾種途徑(Spring里配數據源的途徑):
1)、jdbc驅動程序定義的數據源;
2)、jndi查詢的數據源;
3)、連接池的數據源;
下面是採用連接池的方式配置數據源,首先配置連接池,需要下載DBCP,然後把jar文件放到classPath下,DBCP裡面有多個提供池功能的數據源,我們採用最常用的一個BasicDataSource,這個使用起來比較簡單,BasicDataSource的配置代碼和常用的配置屬性見P110。
jdbc驅動定義的數據源有兩種:DriverManagerDataSource、SingleConnectionDataSource,這兩種都有弊端,一般不用(一個是沒有進行池管理,一個是只有一個連接,用的很少)。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面首先講解第一部分內容:使用JDBC模板
對於JDBC來說,Spring提供了3個模板類:JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate。
下面是這3個類最基本的類似的使用方式(它們的使用方式非常類似,只是執行查詢、修改等操作時參數不同,配置完全類似):
1、首先聲明Template:
<bean id="jdbcTemplate" class="org.spring......JdbcTemplate">
<property name="datasource" ref="dataSource"/>
</bean>
2、然後在Dao裡面聲明private JdbcTemplate jdbcTemplate,並聲明set方法。
3、聲明Dao Bean,並注入jdbcTemplate屬性:
<bean id="rantDao" class="com.roadrant......JdbcRantDao">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
4、接下來就可以在DAO中使用jdbcTemplate操作資料庫了。具體使用方式參考書上使用範例。(書上都有,要詳細查看其中比如更新、查詢、刪除等對應方法)。
注意:上面是JdbcTemplate的大體使用示例及配置,另外兩個NamedParameterJdbcTemplate、SimpleJdbcTemplate的配置基本相同,只需將類名修改下並且DAO是聲明變數時將變數類型修改下即可。具體的操作SQL語句方式示例自己詳細看書。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面講解第二部分內容:Spring對JDBC的DAO支持類:
Spring的JdbcDaoSupport就是用於編寫基於JDBC的DAO類的基類,我們只需讓自己的DAO類繼承它即可(下面是使用步驟):
1、讓自己的DAO類繼承JdbcDaoSupport,例如
public class JdbcRantDao extends JdbcDaoSupport......{.......}
2、接下來聲明自己的DAO,並注入jdbcTemplate(不需要DAO裡面定義jdbcTemplate屬性)或直接將數據源注入(更簡單,這樣就不需要在Spring里聲明jdbcTemplate Bean了)
<bean id="rantDao" class="com.roadrantz......JdbcRantDao">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
【註:這樣的話就不需要在自己的DAO里定義jdbcTemplate這個屬性了,因為JdbcDaoSupport類里有這個屬性,繼承過來即可。但還需要在Spring里聲明jdbcTemplate Bean】;
或
<bean id="rantDao" class="com.roadrantz......JdbcRantDao">
<property name="dataSource" ref="dataSource"/>
</bean>
【註:當JdbcDao的dataSource屬性被設置后,它會在內部創建一個JdbcTemplate實例,這樣我們就不需要自己再Spring里明確聲明一個JdbcTemplate Bean了,並且自己的Dao類里也不需要定義JdbcTemplate屬性了。這種使用方式比較簡單實用】
3、利用JdbcDaoSupport的getJdbcTemplate()方法能方便的訪問JdbcTemplate,然後用它操作SQL語句操作資料庫。具體JdbcTemplate操作SQL語句及各種增刪改查操作示例見書上。
注意:上面是Spring對Jdbc的Dao支持類,使用示例及配置,另外兩個NamedParameterJdbcDaoSupport、SimpleJdbcDaoSupport的配置基本相同,只需將Dao繼承的類名修改下即可,例如getNamedParameterJdbcTemplate()方法即可獲得NamedParameterJdbcTemplate的一個實例。具體操作SQL的使用方式將書上。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面講解第三部分內容:Spring對ORM框架的支持,重點講解Spring里繼承Hibernate:
選擇Hibernate版本:Hibernate2和Hibernate3使用中最重要一點區別是Hibernate3支持註解,Hibernate2不支持。大部分情況下還是使用Hibernate3。
與Hibernate進行狡猾的主要介面是org.hibernat.session,這個session介面提供了基本的數據訪問功能,比如從資料庫保存、更新、和載入對象,通過它,程序能執行任何持久功能。獲得Hibernate Session對象引用的標準方式是實現Hibernate的SessionFactory介面。SessionFactory負責打開、關閉、和管理Hibernate Session,以及其他一些功能。
就像JdbcTemplate把JDBC的繁瑣工作抽離出去一樣,Spring的HibernateTemplate在Hibernate Session之上提供了一個抽象層,其主要功能是簡化打開和關閉Hibernate會話,並且把Hibernate的特定異常轉化為表Spring ORM異常之一。
下面是Spring集成Hibernate的步驟:
1、聲明hibernateTemplate Bean並注入sessionFactory:
<class id="hibernateTemplate" class="org.springframework.......HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</class>
2、聲明SessionFactory Bean,sessionFactory屬性被設置為org.hibernate.SessionFactory實現的一個引用,這裡提供幾種可選的聲明方式:
1)、使用Spring的LocalSessionFactoryBean:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalLocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources"><!--映射文件-->
<list>
<value>com/roadrantz/domain/Rant.hbm.xml</value>
.................
</list>
<property/>
<property name="hibernateProperties"><!--hibernate配置屬性-->
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
</props>
</property>
</bean>
2)、我們可以選擇使用註解把持久元數據標記到域對象。對於基於註解的Hibernate來說,Spring的AnnotationSessionFactory和上面的LocalSessionFactory Bean很像,只是它基於一個或多個域類里的註解和創建SessionFactory:
<bean id="sessionFactory" class=".............AnnotationSessionFactory">
<property name="dataSource" ....../>
<property name="annotatedClasses"><!--包含一個或多個包含持久註解的類-->
<list>
<value>com.roadrantz.domain.Rant</value>
..............
</list>
</property>
<property name="hibernateProperties">......</property>
</bean>
3、然後在自己的Dao類裡面定義屬性,例如:
private HibernateTemplate hibernateTemplate;並定義此屬性的set方法。
4、聲明Dao Bean,並注入hibernateTemplate屬性:
<bean id="rantDao" class="com.roadrantz........HibernateRantDao">
<property name="hibernateTemplate" ref="hibernateTemplate">
</bean>
5、接下來就是使用hibernateTemplate操作資料庫了,詳細操作方式看書,。
例如:hibernateTemplate.saveOrUpdate(velicle);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面講解第四部分內容:Spring對Hibernate的DAO支持類:
為了讓上面講解的一部分的事情簡單一些,Spring提供了HibernateDaoSupport,它能夠讓我們把會話工廠Bean直接裝配到DAO類,會創建一個HibernateTemplate供DAO使用。
下面是使用步驟:
1、讓自己的Dao類繼承HibernateDaoSupport。例如:
public clss HibernateRantDao extends HibernateDaoSupport{....................}
2、在Dao裡面使用getHibernteTemplate()方法獲得由HibernateDaoSupport創建的HibernateTemplate(在Dao裡面不需要自己定義HibernateTemplate屬性了),並用它來操縱資料庫。
例如:
public void saveMotorist(Motorist motorist) {
getHibernateTemplate().saveOrUpdate(motorist);
}
3、聲明Dao Bean,並把SessionFactory Bean裝配到Dao Bean的SessionFactory屬性:
<bean id="rantDao" class="com.roadrantz.dao.hibernate.HibernateRantDao">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
【HibernateRantdao的新父類HibernateDaoSupport需要一個Hibernate SessionFactory,這樣它才能在內部生成一個HibernateTemplate,所以需要把sessionFactory Bean注入到裡面】
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面講解第五部分內容:Hibernate3上下文會話(解決Hibernate與Spring的耦合問題):
HibernateTemplate的缺點是具有一定的侵入性,當我們使用Spring的HibernateTemplate時(無論直接使用還是通過HibernateDaoSupport),HibernateRantDao類都被耦合到Spring API,而Hibernate3的上下文會話可以解決這一問題。
下面是Hibernate3的上下文會話使用方式:
1、在自己的Dao裡面定義SessionFactory sessionFactory屬性,並定義此屬性set方法。
2、配置自己的Dao Bean,並注入sessionFactory屬性:
<bean id="rantDao" class="com.roadrantz.......HibernateRantDao">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
【在這個新的HibernateRantDao里,sessionFactory屬性注入了一個sessionFactory引用,由於sessionFactory來自於Hibernate API,所以HibernateRantDao不再依賴於Spring框架,現在我們就要使用sessionFactory來處理當前會話,而不是使用HibernateTemplate來執行持久操作。】
3、使用SessionFactory來處理當前會話:
public void saveRant(Rant rant) {
sessionFactory.getCurrantSession().saveOrUpdate(rant);
}
推薦閱讀文章
在linux系統下,使用命令執行資料庫腳本的時候,中文出現亂碼,請大神們幫求解啊多謝了啊
在js中使用document.location.href找不到servlet,出現404異常,別人一樣的代碼就能找到
將sql server 2000 轉向mysql 資料庫
請教各位,如果java web項目使用struts1以後還能使用servlet接受客戶端傳來的接送嗎
公布網站后,資料庫沒有用了,不能訪問
安插圖片到SQL資料庫,保存圖片路徑,沒有反應
用poi將excel文件的數據導入sqlsever資料庫,該如何解決
請教這個網站評價系統使用什麼寫的,本人如何評價不成功,
幫忙解釋下C/S模式下的程序交互性如何理解,多謝
交互內容超出範圍外的滑鼠移入展示移出隱藏
Spring 使用資料庫(資料庫交互處置)
於httpclient上傳文件是中文名稱的處置
struts2使用convention解決思路
怎麼用jsp實現與資料庫的交互?
輸入錯誤Python 錯誤處理 Python 基礎教程 try.except 輸入錯誤
使用 RemoteObject 組件與java靠山進行數據交互
SecurityContext is empty or contents are anonymous處置
科幻片中的交互方式
spring事物管理,該怎麼處理
家中收入排行榜:該怎麼處理
兼容新處置要點
Bookmark the
permalink
,來源:互聯網
為你推薦
資料庫學習之一: 在 Oracle sql developer上運作SQL必知必會腳本
用戶之間imp的有關問題
跟蹤sql會話 dbms_monitor
創設邏輯dg
查尋本庫包含某欄位的所有表
遊戲資料庫數據治理系統開發體會
Entity Framework Database/Code First實現對錶開展壓縮配置
500多g的java、c語言、net、移動開發以及資料庫等視頻教程
mongodb 慣用語句
ORACLE 中 PROFILE的治理
DB2常見異常及解決方法
查過程的存儲過程和定時任務
JAVA 獲取資料庫門類(補充)
OGC_X的ORA-06553異常
方法中既有hibernate又有jdbc,加了@Transactional但事物回滾錯誤
最新文章
圖形變換的邏輯題,很有意思
找尋實分析與複分析(rudin)第九章答案
信息系統項目管理師資料分享解決方案
信息系統項目管理師資料分享,該如何解決
php這幾年發展的怎麼
實在不行了,諮詢大家一個有關問題:想報java培訓,有沒有什麼比較穩妥的培訓機構推薦
求教,關於Delphi中Treeview組件的有關問題
delphi 是不是可以控制 android手機以及裡面的應用
一百分求解.可累加.對某個線程池的不解以及到失望.
delphi xe 串口通訊解決方法
藥品電子監管碼上傳有關問題
delphi讀取mysql資料庫怎麼只顯示內容,不顯示錶頭
無法顯示資料庫內容,該怎麼解決
恭賀新禧,水到渠成
當前的Delphi還會偷偷發內容給官網嗎?