spring3-注解JdbcDaoSupport

时间:2012-05-13 09:02:42

标签: spring jdbc dao

在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'是必需的

我不想使用:

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

此代码在xml中设置,“jdbcTemplate”已在其他“spring-xml”中定义。

如何通过注释解决此问题:“'dataSource'或'jdbcTemplate'是必需的”

2 个答案:

答案 0 :(得分:4)

您可以使用以下方法之一。第一个 - 首选/推荐使用dataSource,因为您不在公共接口中公开SpringFramework类。两者都有效。

@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);
  }
}

答案 1 :(得分:0)

我甚至觉得将数据源作为构造函数注入DAO是一个不必要的编码步骤。 为什么不将Spring config XML中的数据源注入JDBC模板,只需获取jdbctTemplate 每个DAO中的对象。

<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