Весной, когда мы вставляем в базу данных, мы можем использовать JdbcDaoSupport
или нет. Мой вопрос в том, каковы преимущества его использования и в каких обстоятельствах мы должны его использовать?Для чего используется JdbcDaoSupport?
ответ
Согласно этим ответам:
- Proper way to inject parent class dependencies with Spring annotations
- spring3-annotation-JdbcDaoSupport
- NamedParameterJdbcDaoSupport datasource autowire?
JdbcDaoSupport, NamedParameterJdbcDaoSupport, SimpleJdbcDaoSupport не нужны и являются умственной пылью. Они не сохраняют ни одной строки кода, потому что вам нужно внедрить источник данных или шаблон.
То, что я рекомендую - создавать шаблоны в 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);
}
}
UPDATE Официальное заявление о без гражданства (и поэтому безопасность потока) из JdbcTemplate
/NamedParameterJdbcTemplate
здесь https://jira.springsource.org/browse/SPR-11478
Сначала укажем, что API задает этот класс как класс удобства («поддержка»). Я полагаю, что поддержка JdbcDaoSupport также дает вам базовую реализацию DAO design для jdbc, тогда как класс шаблона (см. template pattern) предоставит вам singleton, который используется для ввода в классы DAO.
По моему опыту, я не нашел причины, чтобы связать мой DAO с классом поддержки *. Вместо этого я создаю свои конкретные компоненты jdbcTemplate и внедряю их в свои классы DAO, предпочитая композицию над наследованием - как правило, хорошая объектно-ориентированная практика.
От Spring docs «Вы можете выбрать, следует ли наследовать от этого класса. Класс JdbcDaoSupport предоставляется только в качестве удобства».
As Spring states, JdbcDaoSupport - только для удобства. Они ничего не говорят о своих преимуществах по сравнению с использованием одной из реализаций шаблонов.
- 1. Для чего используется POCO_NO_NET_IFTYPES?
- 2. Для чего используется useLocalSessionState?
- 3. Для чего используется NT_GNU_BUILD_ID?
- 4. Для чего используется IList?
- 5. Для чего используется #pragma?
- 6. Для чего используется GLOBALPKG.RET1?
- 7. Для чего используется robots.txt.dist?
- 8. Для чего используется swarminject?
- 9. Для чего используется sigaddset?
- 10. Для чего используется @XXXXX?
- 11. Для чего используется структура.sql?
- 12. Для чего используется секунда?
- 13. Для чего используется идентификатор?
- 14. Для чего используется LDAP?
- 15. Для чего используется _references.js?
- 16. Для чего используется Sqlite?
- 17. Для чего используется maven.multiModuleProjectDirectory?
- 18. ASM - для чего используется «%»?
- 19. Для чего используется iframe?
- 20. Для чего используется imagecreatetruecolor?
- 21. Для чего используется __init__?
- 22. Для чего используется hashCode?
- 23. Для чего используется героку?
- 24. Для чего используется?
- 25. Для чего используется JMSType?
- 26. Для чего используется GCC_NO_COMMON_BLOCKS?
- 27. Для чего используется sys/user.h?
- 28. Java - для чего используется «@Override»?
- 29. Для чего используется хеширование изображений?
- 30. PHP: для чего используется pcntl_signal?