在Spring中,当我们插入数据库时,我们可以使用或不使用JdbcDaoSupport
。我的问题是,使用它有什么好处,我们应该在什么情况下使用它?
最佳答案
根据这些答案:
- Proper way to inject parent class dependencies with Spring annotations
- spring3-annotation-JdbcDaoSupport
- NamedParameterJdbcDaoSupport datasource autowire?
JdbcDaoSupport、NamedParameterJdbcDaoSupport、SimpleJdbcDaoSupport是不必要的,是精神上的灰尘。它们不会保存任何代码行,因为您需要将数据源或模板注入(inject)其中。
我的建议 - 在每个数据源的 XML/类配置中创建模板并重用/注入(inject)它们,因为根据文档,模板是线程安全的:
Once configured, a JdbcTemplate instance is threadsafe. You may want multiple JdbcTemplate instances if your application accesses multiple databases, which requires multiple DataSources, and subsequently multiple differently configured JdbcTemplates.
比较applicationContext.xml
:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<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="jdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
和YourDaoImpl.java
:
public class YourDaoImpl implements YourDao {
@Autowired
private NamedParameterJdbcTemplate jdbcTemplate;
@Override
public int tableExists(String table) {
String sql = "select count(*) from all_tables"
+ " where table_name = :tbl";
return jdbcTemplate.queryForObject(
sql, new MapSqlParameterSource("tbl", table), Integer.class);
}
}
带有JdbcDaoSupport.java
:
public class YourDaoImpl extends NamedParameterJdbcDaoSupport implements YourDao {
@Autowired
public void setDs(DataSource dataSource) {
setDataSource(dataSource);
}
@Override
public int tableExists(String table) {
String sql = "select count(*) from all_tables"
+ " where table_name = :tbl";
return getNamedParameterJdbcTemplate()
.queryForObject(
sql,
new MapSqlParameterSource("tbl", table), Integer.class);
}
}
UPDATE 关于 JdbcTemplate
/NamedParameterJdbcTemplate
的无状态(以及线程安全)的官方声明 https://jira.springsource.org/browse/SPR-11478
关于spring - JdbcDaoSupport 是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21519940/