web-dev-qa-db-ja.com

JdbcDaoSupportは何に使用されますか?

Springでは、データベースに挿入するときに、JdbcDaoSupportを使用するかどうかを指定できます。私の質問は、それを使用する利点は何であり、どのような状況でそれを使用する必要があるかです。

20
khateeb

これらの回答によると:

JdbcDaoSupportNamedParameterJdbcDaoSupportSimpleJdbcDaoSupport は不要であり、精神的なほこりです。データソースまたはテンプレートを挿入する必要があるため、コード行は保存されません。

私がお勧めすること-データソースごとに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

25
gavenkoa

最初に [〜#〜] api [〜#〜] を指摘して、このクラスをコンビニエンスクラス( "サポート")として指定します。 JdbcDaoSupportは、jdbcの DAO設計 の基本実装をサポートし、提供していますが、テンプレートクラス( テンプレートパターン を参照)は singleton DAOクラスに挿入するために使用されます。

私の経験では、DAOを* Supportクラスに結合する理由を見つけていません。代わりに、特定のjdbcTemplate Beanを作成し、継承よりも構成を優先するDAOクラスにそれらを注入します。

Spring docs から、「このクラスから継承するかどうかを選択できます。JdbcDaoSupportクラスは便宜的にのみ提供されています。」.

Springが述べているように、JdbcDaoSupportは便利なだけです。彼らは、テンプレート実装の1つを使用することに対するその利点については何も述べていません。

8
Prancer