2012-01-22 61 views
2

我想連接到我的第一個Spring項目上的MySQL數據庫,我似乎忽略了一些非常簡單的東西。數據庫池 - 連接到Spring3中的Mysql數據庫MVC

我有這個bean在我的application-context.xml文件中被註釋掉了!

<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.url}" 
     p:username="${jdbc.username}" 
     p:password="${jdbc.password}" /> 

我知道這是要健全愚蠢,但爲了創建連接到使用JDBC和或Spring的JdbcTemplate MySQL數據庫類,有什麼事我在這裏做什麼?

我對如何在上面的bean中填充屬性感到困惑,我是否會像這樣在超類中執行它,然後從中擴展我的子類。

import org.springframework.jdbc.datasource.DriverManagerDataSource; 

public class JdbcDao { 
    protected DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
    JdbcDao(){ 
     dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
     dataSource.setUrl("jdbc:mysql://localhost/db_name"); 
     dataSource.setUsername("bcash"); 
     dataSource.setPassword("");   
    }  
} 

我很困惑,所以任何幫助,是真正apprecated,

非常感謝

+0

請詳細說明 – user866190

回答

1

JdbcTemplate Best Practices進一步的信息。

堅果殼:不,您的DAO不會通過new創建新的數據源;這違背了使用Spring的目的。應該注入實現,而不是直接實例化;大致爲:

public class TheDaoImpl implements TheDao { 

    private JdbcTemplate jdbcTemplate; 

    public void setDataSource(DataSource dataSource) { 
     this.jdbcTemplate = new JdbcTemplate(dataSource); 
    } 

    // JDBC-backed implementations of TheDao follow... 
} 

然後在你的Spring配置(如果不使用註釋),也大致是:

<bean id="theDao" class="com.bar.plugh.TheDaoImpl" p:dataSource-ref="dataSource" /> 

(這將使用二傳手;你也可以使用一個註釋,並跳過XML配置。 )

您還可以使用JdbcTemplate作爲您的基類,並節省更多的能量。

我推薦通過Data access with JDBC參考文檔(如果您使用的是JDBC)或直接處理ORM選擇的相應章節。

+0

感謝戴夫的回答,我想我可能會問的是如何配置dataSource?是通過填充context-xml文件中的值來完成的嗎? – user866190

+0

@ user866190是的,雖然它看起來像期待使用PropertyPlaceholderConfigurator。 –

2

如果您使用Tomcat作爲您的應用程序服務器,則可以進行更多類似的操作。

定義在服務器的context.xml文件的用戶名/密碼的連接(如應用程序相對):

<Resource name="jdbc/resourceNameToUse" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="<UserName>" 
      password="<Password>" 
      driverName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost:3306/db_name" 
      maxActive="100" 
      maxIdle="5" 
      validationQuery="Select 1" 
      useCompression="true" /> 

然後當你配置Spring創建中查找數據源使用JNDI上述資源配件定義:

<bean id="targetDataSource" 
     class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" 
       value="java:comp/env/jdbc/resourceNameToUse"/> 
    </bean> 
    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy"> 
    <property name="targetDataSource"> 
     <ref local="targetDataSource"/> 
    </property> 
    </bean> 

在這一點上,你可以創建你的JdbcTemplate實例作爲一個Spring bean引用您的數據源:

<bean id="jdbcTemplate" 
     class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource"> 
     <ref bean="dataSource" /> 
    </property> 
    </bean> 

如果您使用的是Spring 3,則可以簡單地將DAO中的JdbcTemplate標記爲@AutoWired,Spring將會將變量名稱與您已定義的bean的id相匹配,併爲您注入JdbcTemplate。如果您不使用Spring 3,則可以在定義DAO Bean時簡單地注入JdbcTemplate。

public class MyDao { 
    @AutoWired 
    private JdbcTemplate jdbcTemplate; 
}