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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring数据持久化

發(fā)布時間:2025/3/17 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring数据持久化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、spring提供了一組數(shù)據(jù)訪問框架,集成了多種數(shù)據(jù)訪問技術(shù)。支持JDBC、ibatis、hibernate、jpa等持久化框架。

2、spring的數(shù)據(jù)訪問哲學(xué)

  spring的目標(biāo)之一就是允許開發(fā)人員在開發(fā)應(yīng)用程序時,能夠遵循面向?qū)ο笤瓌t中的“針對接口編程”。spring對數(shù)據(jù)訪問的支持也不例外。DAO是數(shù)據(jù)訪問對象(data access object)的縮寫,DAO提供了數(shù)據(jù)讀取和寫入到數(shù)據(jù)庫中的一種方式。他們以接口的方式發(fā)布功能,應(yīng)用程序的其他部分可以通過接口來進(jìn)行訪問。如圖:

服務(wù)對象通過接口來訪問DAO,它使得服務(wù)對象易于測試,因為他們不再與特定的數(shù)據(jù)訪問實現(xiàn)綁定在一起。此外,數(shù)據(jù)訪問層是以持久化技術(shù)無關(guān)的方式來進(jìn)行訪問的。持久化方式的選擇獨立于DAO,只有相關(guān)的數(shù)據(jù)訪問方法通過接口來進(jìn)行發(fā)布。這可以實現(xiàn)靈活的設(shè)計并使得切換持久化框架對應(yīng)用程序其他部分所帶來的影響最小。如果將數(shù)據(jù)訪問層的實現(xiàn)細(xì)節(jié)滲透到應(yīng)用程序的其他部分中,那么整個應(yīng)用程序?qū)⑴c數(shù)據(jù)訪問層耦合在一起,從而導(dǎo)致僵化的設(shè)計。

3、spring的數(shù)據(jù)訪問異常體系

  JDBC訪問數(shù)據(jù)會強制捕獲SQLException異常,JDBC對于所有的數(shù)據(jù)訪問問題都會拋出SQLException異常,但是這個異常卻沒有告訴你哪里出錯了以及如何進(jìn)行處理,不能再catch塊中解決問題。一些持久化框架提供了相對豐富的異常體系。分別對應(yīng)于特定的數(shù)據(jù)訪問問題。這樣就可以針對想處理的異常編寫catch代碼塊。

  不同于JDBC,spring提供了多個數(shù)據(jù)訪問異常,分別描述了它們拋出時所對應(yīng)的問題。如圖:

盡管spring的異常體系比JDBC簡單的SQLException豐富得多,但它并沒有與特定的持久化方式相關(guān)聯(lián)。這意味著我們可以用spring拋出一致的異常,而不用關(guān)心所選擇的持久化方案。這有助于我們將所有持久化機制與數(shù)據(jù)訪問隔離開來。spring認(rèn)為觸發(fā)異常的很多問題是不能在catch代碼塊中修復(fù)的。spring使用了非檢查型異常,而不是強制開發(fā)人員編寫catch代碼塊。這把是否要捕獲異常的權(quán)力留給了開發(fā)人員。

4、數(shù)據(jù)訪問模板化

  spring將數(shù)據(jù)訪問過程中固定的和可變的部分明確劃分為兩個不同的類:模板(template)和回調(diào)(callback)。模板管理過程中固定的部分,而回調(diào)處理自定義的數(shù)據(jù)訪問代碼。如圖:

  針對不同的持久化平臺,spring提供了多個可選的模板。如圖:

使用數(shù)據(jù)訪問模板只需將其配置為spring上下文中的bean并將織入到應(yīng)用程序的DAO中。或者,你還可以使用spring的DAO支持類進(jìn)一步簡化應(yīng)用程序的DAO配置。盡管直接織入模板是不錯的選擇,但是spring還提供了一系列便利的DAO基類,這些基類可以用于管理模板。

5、使用DAO支持類

  數(shù)據(jù)訪問模板并不是spring數(shù)據(jù)訪問框架的全部。每個模板提供了一些簡便的方法,使我們不必創(chuàng)建明確的回調(diào)實現(xiàn),從而簡化了數(shù)據(jù)訪問。另外,基于模板-回調(diào)設(shè)計,spring提供了DAO支持類,而將業(yè)務(wù)自己的DAO類作為它的子類。如圖:

  spring不僅提供了多個數(shù)據(jù)模板實現(xiàn)類,還為每種模板提供了對應(yīng)的DAO支持類。如圖:

6、配置數(shù)據(jù)源

  不管選擇哪一種spring DAO的支持方式,都需要配置一個數(shù)據(jù)源的引用。spring提供了在spring上下文中配置數(shù)據(jù)源bean的多種方式,包括:

  1)通過JNDI查找的數(shù)據(jù)源;

  Spring應(yīng)用程序經(jīng)常部署在JavaEE應(yīng)用服務(wù)器中,如WebSphere、JBoss或者像Tomcat這樣的Web容器。這些服務(wù)器允許你配置通過JNDI獲取數(shù)據(jù)源。這種配置的好處在于數(shù)據(jù)源完全可以在應(yīng)用程序之外進(jìn)行管理,這樣應(yīng)用程序只需在訪問數(shù)據(jù)庫的時候查找數(shù)據(jù)源完全可以在應(yīng)用程序之外進(jìn)行管理,這樣應(yīng)用程序只需在訪問數(shù)據(jù)庫的時候查找數(shù)據(jù)源就可以了。另外,在應(yīng)用服務(wù)器中管理的數(shù)據(jù)源通過以池的方式組織,從而具備更好的性能,并且支持系統(tǒng)管理員對其進(jìn)行熱切換。

  利用spring,我們可以像使用Spring Bean那樣配置JNDI中數(shù)據(jù)源的引用并將其裝配到需要的類中。位于jee命名空間下的<jee:jndi-lookup>元素并將其裝配到Spring中。如:<jee:jndi-lookup id="dataSource" jndi-name="/jdbc/zhyypt" resource-ref="true" />

  2)連接池的數(shù)據(jù)源;

  盡管Spring并沒有提供數(shù)據(jù)源連接池實現(xiàn),但Jakarta Commons Data-base Connection Pooling(DBCP)項目是一個不錯的選擇。

  DBCP包含了多個提供連接池功能的數(shù)據(jù)源,其中BasicDataSource是最常用的,因為它易于在Spring中配置,而且類似于Spring自帶的DriverManagerData-Source。配置如下:

  3)通過JDBC驅(qū)動程序定義的數(shù)據(jù)源;

  在Spring中,通過JDBC驅(qū)動定義數(shù)據(jù)源是最簡單的配置方式。Spring提供了兩種數(shù)據(jù)源對象供選擇。

  DriverManagerDataSource:在每個連接請求時都會返回一個新建的連接。與DBCP的BasicDataSource不同,由DriverManagerDataSource提供的連接并沒有進(jìn)行池化管理。

  SingleConnectionDataSource:在每個連接請求時都會返回同一個連接。盡管SingleConnectionDataSource不是嚴(yán)格意義上的連接池數(shù)據(jù)源,但是你可以將其視為只有一個連接的池。

  以上兩個連接的配置如下:

7、使用JDBC模板

  Spring的JDBC框架承擔(dān)了資源管理和異常處理的工作,從而簡化了JDBC代碼。Spring為JDBC提供了3個模板類使用。

  JdbcTemplate:最基本的Spring JDBC模板,這個模板支持最簡單的JDBC數(shù)據(jù)庫訪問功能以及簡單的索引參數(shù)查詢。

  NamedParameterJdbcTemplate:使用該模板執(zhí)行查詢時,可以將查詢值以命名參數(shù)的形式綁定到SQL中,而不是使用簡單的索引參數(shù)。

  SimpleJdbcTemplate:該模板類利用Java5的一些特性,如自動裝箱、泛型以及可變參數(shù)列表來簡化JDBC模板的使用。

  在Spring3.0中,對NamedParameterJdbcTemplate已經(jīng)不在支持——所以相對于SimpleJdbcTemplate,沒有理由在選擇簡單的JdbcTemplate了。只需要設(shè)置DataSource就能夠讓SimpleJdbcTemplate正常工作。在Spring中配置SimpleJdbcTemplate非常容易,如下所示:

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">

  <constructor-arg ref="dataSource"/>

</bean>

  屬性dataSource所引用的dataSource可以是javax.sql.DataSource的任意實現(xiàn)。

  現(xiàn)在,可以將jdbcTemplate裝配到DAO中并使用它來訪問數(shù)據(jù)庫。

public class JdbcSpitterDAO impliments SpitterDAO{

  private SimpleJdbcTemplate jdbcTemplate;

  public void setJdbcTemplate(SimepleJdbcTemplate jdbcTemplate){

    this.jdbcTemplate = jdbcTemplate;

  }

}

  還需要裝配JdbcSpitterDAO的jdbcTemplate屬性,如下:

<bean id="spitterDao" class="com.zhyypt.spitter.SimpleJdbcTemplateSpitterDao">

  <property name="jdbcTemplate" ref="jdbcTemplate"/>

</bean>

  對于應(yīng)用程序中的每一個JDBC DAO類,我們都需要添加一個SimpleJdbcTemplate屬性以及對應(yīng)的setter方法,并確保將SimpleJdbcTemplate ?Bean裝配到每個DAO的SimpleJdbcTemplate屬性中。這會產(chǎn)生大量的重復(fù)工作。

  一種可行的解決方案就是為所有的DAO創(chuàng)建一個通用的父類,在其中會有SimpleJdbcTemplate屬性。然后讓所有的DAO類繼承這個類并使用父類的SimpleJdbcTemplate進(jìn)行數(shù)據(jù)訪問。Spring提供了內(nèi)置的基類(JdbcDaoSupport、SimpleJdbcDaoSupport和NamedParameterJdbcDaoSupport),分別對應(yīng)于不同的Spring JDBC模板。要使用這些DAO支持類,就要確保DAO類繼承此類。如:

public class JdbcSpitterDao extends SimpleJdbcDaoSuppoort implements SpitterDao{

...

}

  

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

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

總結(jié)

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

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