【spring基礎】spring與jdbc整合詳解

先上一段簡單示例程序員

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類spring

public class PersonDao extends MyTemplate{

    public void savePerson() throws Exception{
        this.insert("insert into person(pid,pname) values(3,'aaa')");
    }
}

spring配置文件sql

    <!-- 
        引入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>

測試類apache

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中動態變量能夠用注入的形式給予。這樣的編程方式適合包裝成模板。靜態代碼構成了模板,而動態變量則是須要傳入的參數。app

spring與jdbc結合核心類JdbcTemplate框架

  一、基於模板的設置(爲何能夠設置成基於模板的形式)測試

  二、完成了資源的建立和釋放的工做

  三、簡化爲咱們對JDBC的操做

  四、完成了對JDBC的核心流程的工做,包括SQL語句的建立和執行

  五、僅須要傳遞DataSource就能夠把它實例化

  六、JdbcTemplate只須要建立一次

  七、JdbcTemplate是線程安全類

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

public class PersonDao extends JdbcDaoSupport {
    public void savePerson(String sql){
        this.getJdbcTemplate().execute(sql);
    }
}

spring配置文件改成

<bean id="personDao" class="cn.qjc.jdbc.dao.PersonDao">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
</bean>

JdbcTemplate類結構圖

執行過程

說明:

    一、執行數據的操做的是JdbcTemplate

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

    三、經過給JdbcTemplate注入dataSource

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

           b、採用setter方法進行注入

    四、能夠給JdbcDaoSupport注入dataSource

    五、能夠給JdbcDaoSupport注入JdbcTemplate

因此spring與jdbc整合有三種方法,但實際上核心類爲JdbcTemplate

  一、使用JdbcTemplate

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

        注:爲何只要對JdbcTemplate注入DataSource就能夠了?

  二、繼承jdbcDaoSupport

        在Dao類中,繼承JdbcDaoSupport。由於JdbcDaoSupport已經有了JdbcTemplate的引用,因此只要繼承JdbcDaoSupport就至關於有了JdbcTemplate屬性。

  三、繼承JdbcTemplate

 

spring還提供了其餘ORM框架整合模式都差很少,徹底可直接套用。

spring+hibernate

spring+Jdo

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

相關文章
相關標籤/搜索