【问题标题】:spring3-annotation-JdbcDaoSupportspring3-annotation-JdbcDaoSupport
【发布时间】:2012-05-21 04:21:05
【问题描述】:

在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' or 'jdbcTemplate' is required”

【问题讨论】:

标签: spring jdbc dao


【解决方案1】:

您可以使用以下方法之一。第一个 - 首选/推荐使用数据源,因为您不会在公共接口中公开 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);
  }
}

【讨论】:

  • 如果您使用第一种方法,DataSource 是否引用 applicationContext.xml 中定义的数据源:
  • 是的。我们通过构造函数 arg 注入数据源。
  • 我使用了第一个选项,但我得到 java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required 你能帮忙吗?
  • 我的 applicationContext.xml 有:
  • 另一种解决方案是注入模板(这是线程安全的!!)而不是配置DaoSupport:stackoverflow.com/a/21992433/173149
【解决方案2】:

我什至觉得将数据源作为 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

【讨论】:

  • JdbcDaoSupport 需要注入 jdbctemplate 属性。你会在这里得到一个运行时异常
猜你喜欢
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多