3

dao でアノテーションを使用する

@Repository("testDao")
public class TestDaoImpl extends JdbcDaoSupport implements BaseDao{

@Override
public Object addObject(String sqlid, Object obj) {
    // TODO Auto-generated method stub
    return null;
}

原因: java.lang.IllegalArgumentException: 'dataSource' または 'jdbcTemplate' が必要です

使いたくない :</p>

<bean id="termsDao" class="com.manage.base.dao.impl.TestDaoImpl">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>

このコードは xml に設定されており、「jdbcTemplate」は別の「spring-xml」で定義されています。</p>

この問題をアノテーションで解決する方法:「'dataSource' または 'jdbcTemplate' が必要です」</p>

4

2 に答える 2

5

以下のいずれかの方法を使用できます。最初のもの-パブリックインターフェイスでSpringFrameworkクラスを公開しないため、dataSourceを使用することをお勧めします。どちらも機能します。

@Repository("testDao")
public class TestDaoImpl extends JdbcDaoSupport implements BaseDao{

  @Autowired
  TestDaoImpl(DataSource dataSource) {
    setDataSource(dataSource);
  }
}

または

@Repository("testDao")
public class TestDaoImpl extends JdbcDaoSupport implements BaseDao{

  @Autowired
  TestDaoImpl(JDBCTemplate template) {
    setJdbcTemplate(template);
  }
}
于 2012-05-13T14:33:00.453 に答える
0

データソースをコンストラクターとして DAO に挿入することは、不要なコーディング手順だとさえ感じています。Spring config XML のデータソースを JDBC テンプレートに挿入し、すべての DAO で jdbctTemplate オブジェクトを取得しないのはなぜですか。

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>
and let your DAO extend JDBCSupport class.

public class PersonDao extends JdbcDaoSupport{
public List<Person> selectAll(){
    String selectAllSql = "SELECT * FROM PERSON;";

    return getJdbcTemplate().query(selectAllSql, new PersonRowMapper());

........}

}

完全な例: http://www.studytrails.com/frameworks/spring/spring-jdbc-dao-support.jsp

于 2014-04-13T23:35:55.513 に答える