在Spring中,当我们插入数据库时,我们可以使用JdbcDaoSupport
或不使用{{1}}。我的问题是,使用它有什么好处,在什么情况下我们应该使用它?
答案 0 :(得分:25)
根据这些答案:
我建议 - 根据文档在每个数据源的XML /类配置中创建模板并将其重新/注入模板是线程安全的:
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
:
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);
}
}
更新关于JdbcTemplate
/ NamedParameterJdbcTemplate
此处https://jira.springsource.org/browse/SPR-11478
答案 1 :(得分:8)
首先让我们指出API将此类指定为便捷类(“support”)。我相信JdbcDaoSupport支持(又称为jdbc提供DAO design的基本实现,而模板类(请参阅template pattern)将为您提供用于注入的singleton DAO课程。
根据我的经验,我没有找到将DAO连接到* Support类的理由。我改为创建我的特定jdbcTemplate bean并将它们注入到我的DAO类中,有利于组合而不是继承 - 通常是一种很好的面向对象的实践。
从Spring docs,“您可以选择是否继承此类。仅提供JdbcDaoSupport类。”。
正如Spring所说, JdbcDaoSupport只是一种便利。他们对使用其中一个模板实现的优势一无所知。