Springでは、データベースに挿入するときに、JdbcDaoSupport
を使用するかどうかを指定できます。私の質問は、それを使用する利点は何であり、どのような状況でそれを使用する必要があるかです。
これらの回答によると:
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
here https://jira.springsource.org/browse/SPR-11478
最初に [〜#〜] api [〜#〜] を指摘して、このクラスをコンビニエンスクラス( "サポート")として指定します。 JdbcDaoSupportは、jdbcの DAO設計 の基本実装をサポートし、提供していますが、テンプレートクラス( テンプレートパターン を参照)は singleton DAOクラスに挿入するために使用されます。
私の経験では、DAOを* Supportクラスに結合する理由を見つけていません。代わりに、特定のjdbcTemplate Beanを作成し、継承よりも構成を優先するDAOクラスにそれらを注入します。
Spring docs から、「このクラスから継承するかどうかを選択できます。JdbcDaoSupportクラスは便宜的にのみ提供されています。」.
Springが述べているように、JdbcDaoSupportは便利なだけです。彼らは、テンプレート実装の1つを使用することに対するその利点については何も述べていません。