spring3注释JDBCDAO支持

spring3注释JDBCDAO支持,spring,jdbc,dao,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.IllegalArgumen

在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:“数据源”或“jdbcTemplate”是必需的

我不想使用:

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

此代码以xml格式设置,而“jdbcTemplate”已在其他“SpringXML”中定义


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

您可以使用以下方法之一。第一种方法-首选/推荐使用数据源,因为在公共接口中不公开SpringFramework类。两者都会起作用

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

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


我甚至觉得将datasource作为构造函数注入DAO是一个不必要的编码步骤。 为什么不将Spring配置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.

让DAO扩展JDBCSupport类。

public类PersonDao扩展了jdbcdao支持{
公共列表selectAll(){
String selectAllSql=“SELECT*FROM PERSON;”;
返回getJdbcTemplate().query(selectAllSql,newPersonRowMapper());
。。。。。。。。 }

}

完整示例:

这里的解决方法:如果使用第一种方法,数据源是否引用applicationContext.xml中定义的数据源:是的。我们正在通过构造函数参数注入数据源。我使用了第一个选项,但得到了java.lang.IllegalArgumentException:“需要数据源”或“jdbcTemplate”您能帮忙吗?我的applicationContext.xml有:另一个解决方案是注入模板(这是线程安全的!!)不是配置
DaoSupport
:JdbcDaoSupport要求注入jdbctemplate属性。您将在此处得到一个运行时异常
<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());