一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 詳解spring與jdbc整合操作

詳解spring與jdbc整合操作

2020-06-27 13:11woonu JAVA教程

這篇文章主要為大家詳細介紹了spring與jdbc整合操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下

先上一段簡單示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MyTemplate {
 
  private DataSource dataSource;
 
  public DataSource getDataSource() {
    return dataSource;
  }
 
  public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
  }
  
  public void insert(String sql) throws SQLException{
    Connection conn = this.dataSource.getConnection();
    Statement stmt = conn.createStatement();
    stmt.executeUpdate(sql);
    stmt.close();
    conn.close();
  }
}

Dao類

?
1
2
3
4
5
6
public class PersonDao extends MyTemplate{
 
  public void savePerson() throws Exception{
    this.insert("insert into person(pid,pname) values(3,'aaa')");
  }
}

spring配置文件

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!--
    引入properties配置文件
   -->
  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
      <value>classpath:jdbc.properties</value>
    </property>
  </bean>
  
  <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
  </bean>
  
  <bean id="myTemplate" class="cn.qjc.jdbc.dao.MyTemplate">
    <!-- setter注入 -->
    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>
  </bean>
  
  <bean id="personDao" class="cn.qjc.jdbc.dao.PersonDao">
    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>
  </bean>
 
</beans>

測試類

?
1
2
3
4
5
6
7
8
9
public class PersonDaoTest {
 
  @Test
  public void testPersonDao() throws Exception{
    ApplicationContext context = new ClassPathXmlApplicationContext("cn/qjc/jdbc/applicationContext.xml");
    PersonDao personDao = (PersonDao)context.getBean("personDao");
    personDao.savePerson();
  }
}

以上代碼將DataSource注入給MyTemplate,再把DataSource注入給PersonDao,因為personDao繼承MyTemplate,所以擁有Datasource屬性。既然PersonDao繼承MyTemplate,所以PersonDao類注入可以改為

<bean id="personDao" class="cn.qjc.jdbc.dao.PersonDao" parent="myTemplate"></bean>

以上例子中MyTemplate類似于設計模式中的模板模式也叫模板方法模式,模板方法模式是所有模式中最為常見的幾個模式之一,是基于繼承的代碼復用的基本技術。

  模板模式 = 靜態代碼+動態變量

在spring中動態變量可以用注入的形式給予。這樣的編程方式適合包裝成模板。靜態代碼構成了模板,而動態變量則是需要傳入的參數。

spring與jdbc結合核心類JdbcTemplate

  1、基于模板的設置(為什么可以設置成基于模板的形式)

  2、完成了資源的創建和釋放的工作

  3、簡化為我們對JDBC的操作

  4、完成了對JDBC的核心流程的工作,包括SQL語句的創建和執行

  5、僅需要傳遞DataSource就可以把它實例化

  6、JdbcTemplate只需要創建一次

  7、JdbcTemplate是線程安全類

使用spring+jdbc修改上面例子(myTemplate類去掉)

?
1
2
3
4
5
public class PersonDao extends JdbcDaoSupport {
  public void savePerson(String sql){
    this.getJdbcTemplate().execute(sql);
  }
}

spring配置文件改為

?
1
2
3
4
5
<bean id="personDao" class="cn.qjc.jdbc.dao.PersonDao">
    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>
</bean>

JdbcTemplate類結構圖

詳解spring與jdbc整合操作

執行過程

詳解spring與jdbc整合操作

說明:

    1、執行數據的操作的是JdbcTemplate

    2、最根本的步驟就是要把dataSource注入到JdbcTemplate

    3、通過給JdbcTemplate注入dataSource

           a、采用構造器的形式注入

           b、采用setter方法進行注入

    4、可以給JdbcDaoSupport注入dataSource

    5、可以給JdbcDaoSupport注入JdbcTemplate

所以spring與jdbc整合有三種方法,但實際上核心類為JdbcTemplate

 1、使用JdbcTemplate

       在Dao類中,用JdbcTemplate作為屬性,用spring對JdbcTemplate進行注入。再對JdbcTemplate進行DataSource注入。

       注:為什么只要對JdbcTemplate注入DataSource就可以了?

 2、繼承jdbcDaoSupport

      在Dao類中,繼承JdbcDaoSupport。因為JdbcDaoSupport已經有了JdbcTemplate的引用,所以只要繼承JdbcDaoSupport就相當于有了JdbcTemplate屬性。

 3、繼承JdbcTemplate

spring還提供了其他ORM框架整合模式都差不多,完全可直接套用。

spring+hibernate

詳解spring與jdbc整合操作

spring+Jdo

詳解spring與jdbc整合操作

由此可看出spring IOC 和 DI 的強大,IOC和DI 完成了從接口到類的對應。利用spring容器程序員很容易的在客戶端實現面向接口編程,而且很容易給接口裝配,結構也可以設置的很靈活。因為接口是自己寫的,類也是自己寫的,配置文件也是自己寫的。spring實際完成了創建對象和裝配的工作,它會自動的對應起來。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
  • JAVA教程java的arrays數組排序示例分享

    java的arrays數組排序示例分享

    排序算法,基本的高級語言都有一些提供。C語言有qsort()函數,C++有sort()函數,java語言有Arrays類(不是Array)。用這些排序時,都可以寫自己的排序規則 ...

    java教程網4492019-11-11
  • JAVA教程java線程并發semaphore類示例

    java線程并發semaphore類示例

    Java 5.0里新加了4個協調線程間進程的同步裝置,它們分別是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介紹Semaphore,Semaphore是用來管理一個資源池的工...

    java教程網4872019-10-31
  • JAVA教程簡介Java的Spring框架的體系結構以及安裝配置

    簡介Java的Spring框架的體系結構以及安裝配置

    這篇文章主要介紹了Java的Spring框架的體系結構以及安裝配置,Spring框架是Java的SSH三大web開發框架之一,需要的朋友可以參考下 ...

    goldensun3592020-03-08
  • JAVA教程Java中Map的用法詳解

    Java中Map的用法詳解

    將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多只能映射到一個值。此接口取代 Dictionary 類,后者完全是一個抽象類,而不是一個接口 ...

    java教程網1572020-04-25
  • JAVA教程java開發微信分享到朋友圈功能

    java開發微信分享到朋友圈功能

    這篇文章主要為大家詳細介紹了java開發微信發送給朋友和分享到朋友圈功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下 ...

    u0132921602672020-05-28
  • JAVA教程java獲取各種路徑的基本方法

    java獲取各種路徑的基本方法

    這篇文章主要為大家詳細介紹了java獲取各種路徑的基本方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    浪漫逆風1892020-06-22
  • JAVA教程Java中常用的6種排序算法詳細分解

    Java中常用的6種排序算法詳細分解

    這篇文章主要介紹了Java中常用的6種排序算法詳細分解,著重說明每個算法的計算過程分解,是探究實現原理級的文章,對于深入理解這些算法有很大幫助,需要...

    junjie1342019-11-25
  • JAVA教程Java中使用BigDecimal進行浮點數運算

    Java中使用BigDecimal進行浮點數運算

    這篇文章主要介紹了Java中使用BigDecimal進行浮點數運算,需要的朋友可以參考下 ...

    Java教程網2422019-11-24
主站蜘蛛池模板: 亚洲欧美日韩国产一区二区精品 | 国产一区二区视频免费 | 亚洲欧美在线观看首页 | 掰开逼操| 皇上撞着太子妃的秘密小说 | 欧美日韩在线观看区一二 | 国产精品成人va在线观看 | 特黄特黄一级片 | www.亚洲视频.com | 亚洲欧美视频在线播放 | 美女把小内内脱个精光打屁屁 | chinese高中生gay男同 | 农村妇女野外牲交一级毛片 | 短篇艳妇系列 | 荡娃艳妇有声小说 | 99re这里只有精品视频在线观看 | 好吊色青青青国产综合在线观看 | 日本嫩模| 星空传媒在线视频 | 国产一卡2卡3卡四卡精品网站 | 欧美人在线一区二区三区 | 99热在线国产 | 免费网站看v片在线香蕉 | 99久久精品免费看国产一区二区 | 99精品免费视频 | 欧美日韩免费一区二区在线观看 | 色老板视频在线观看 | 91美女在线 | 免费一看一级欧美 | 日本人做受全过程视频 | 女人叉开腿让男人捅 | 亚洲男人网 | 精品国产91久久久久 | ange venus与黑人| 波多野结中文字幕在线69视频 | 日产中文乱码卡一卡二 | 亚洲一区二区三区福利在线 | 日本卡一卡2卡3卡4精品卡无人区 | 欧美特黄一级大片 | 四虎精品在线视频 | 国产一二在线观看视频网站 |