2012-01-22 63 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; 
}