Dans quel cas JdbcDaoSupport est-il utilisé?
au printemps, lorsque nous insérons dans la base de données, nous pouvons utiliser JdbcDaoSupport
ou pas. Ma question est, quels sont les avantages à utiliser et dans quelles circonstances, nous devrions l'utiliser?
2 réponses
selon ces réponses:
- bonne façon d'injecter les dépendances de classe mère avec des annotations de printemps
- spring3-annotation-Jdbccdaosupport
- NamedParameterJdbcDaoSupport source de données autowire?
JdbcDaoSupport, NamedParameterJdbcDaoSupport, SimpleJdbcDaoSupport sont inutiles et sont de la poussière mentale. Ils ne sauve aucune ligne de code parce que vous avez besoin d'injecter la source de données ou le modèle.
ce que je recommande - pour créer des modèles dans XML / class config par source de données et les réutiliser / injecter car les modèles sont thread safe selon docs:
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.
Comparer 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>
et 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);
}
}
UPDATE déclaration officielle sur les apatrides (et donc la sécurité du fil) de JdbcTemplate
/NamedParameterJdbcTemplate
ici https://jira.springsource.org/browse/SPR-11478
tout d'abord, signalons le API spécifie cette classe comme une classe commodité ("support"). Je crois que JdbcDaoSupport prend en charge, aka vous fournit, une implémentation de base de la DAO design pour jdbc alors qu'une classe template (voir modèle de modèle) vous donnera un singleton qui est utilisé pour injecter dans vos classes DAO.
D'après mon expérience, je n'ai pas trouvé de raison d'associer mon DAO à un cours de soutien*. J'ai plutôt créer mes haricots jdbcctemplate spécifiques et les injecter dans mes classes DAO favorisant la composition plutôt que l'héritage -- généralement une bonne pratique orientée objet.
Printemps docs "Vous pouvez choisir d'hériter de cette classe. La classe JdbcDaoSupport est fournie à titre de commodité seulement.".
Ressort des états, JdbcDaoSupport est une commodité seulement. Ils ne disent rien de ses avantages par rapport à l'utilisation d'un modèle application.