2011-09-30 91 views
1

我剛剛開始使用Spring框架。我也使用DBCP池,我仍然不確定如何正確使用jdbcTemplate。Spring - jdbcTemplate

這是重用了最佳做法/注射的JdbcTemplate多個DAO之間,或者是對創造的JdbcTemplate每個DAO?

我目前使用的標註方法:

public class FooDAO { 

    private JdbcTemplate jdbcTemplate; 

    @Autowired 
    public void setDatasource(DataSource dataSource) { 
    this.jdbcTemplate = new JdbcTemplate(dataSource); 
    } 
} 

我知道有關JdbcDaoSupport,但我不知道如何注入數據源,因爲方法的setDataSource標記爲final。

但儘管如此,我不知道,如果是重用創建JdbcTemplate或者在沒有最佳實踐。

回答

4

將其注入並共享。不要叫「新」;這從Spring bean工廠的手中取得了控制權。

+0

首先,感謝您的回覆,但我不確定我是否瞭解您的建議。我的DAO被標記爲@Service,所以它們在spring中被作爲bean進行管理。我的DAO被注入到服務中。我明白,重用jdbcTemplate是一種好方法。但我不確定是否有優雅的方式如何去做。 也許JdbcDaoSupport類應該是該解決方案。 – Peter

+0

當然。關鍵是你應該讓Spring給你那個數據源;不要稱之爲「新」並自己創建它。 – duffymo

+0

非常感謝您的光臨,但是本網站爲您提供了投票並接受幫助的答案。如果您發現這可以解決您的問題,請投票表決並接受。 – duffymo

0

我知道有關JdbcDaoSupport,但我不知道如何注入數據源,因爲方法的setDataSource標記爲final。

public class JdbcDaoSupportTest extends JdbcDaoSupport { 

    public void insert() { 
     this.getJdbcTemplate().execute("insert into tb_test1 values(1,'ycl','123')"); 
     System.out.println("complete..."); 
    } 
} 

Spring調用集方法,不關心方法是否是最終的。

<bean id="jdbcDaoSupportTest" class="com.xxxxx.JdbcDaoSupportTest"> 
     <property name="dataSource" ref="dataSource" /> 
</bean> 

然後在JdbcDaoSupportTest,你可以調用this.getJdbcTemplate()來獲得的JdbcTemplate做 任何操作。