我正在尝试连接到我的第一个Spring项目的mysql数据库,我似乎忽略了一些非常简单的事情。
我的application-context.xml文件中有这个bean,它被注释掉了!
<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("");
}
}
我感到困惑,所以任何帮助都是真正值得赞赏的,
非常感谢
答案 0 :(得分: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;
}
答案 1 :(得分:1)
有关详细信息,请参阅JdbcTemplate Best Practices。
Nutshell:不,你的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" />
(这使用了一个setter;您也可以使用注释并跳过XML配置。)
您还可以使用JdbcTemplate作为基类,节省更多精力。
我建议您浏览Data access with JDBC参考文档(如果您使用的是JDBC),或直接处理您的ORM选择的相应部分。