Вопрос по spring – spring3-аннотаций-JdbcDaoSupport

2

Используйте аннотацию в дао

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

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

Вызывается: java.lang.IllegalArgumentException: «источник данных»; или "jdbcTemplate" необходимо

Я не хочу использовать & # xFF1A;

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

этот код установлен в xml & # xFF0C; и & # x201C; jdbcTemplate & # x201D; был определен в других & # x201C; spring-xml & # x201D; & # x3002;

Как решить эту проблему с помощью аннотации & # xFF1A; & # x201C; 'dataSource & apos; или "jdbcTemplate" требуется & # x201D;

Обходной путь здесь:forum.springsource.org/… Tomasz Nurkiewicz

Ваш Ответ

2   ответа
4

ние источника данных является предпочтительным / рекомендуемым, поскольку вы не предоставляете класс 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: & lt; bean id = & quot; dataSource & quot; класс = & Quot; org.apache.commons.dbcp.BasicDataSource & Quot; уничтожить-метод = & Quot; близко & Quot; & GT; & lt; property name = & quot; driverClassName & quot; значение = & Quot; $ {jdbc.driverClassName} & Quot; / & GT; & lt; имя свойства = & quot; url & quot; значение = & Quot; $ {jdbc.url} & Quot; / & GT; & lt; имя свойства = & quot; имя пользователя & quot; значение = & Quot; $ {jdbc.username} & Quot; / & GT; & lt; имя свойства = & quot; пароль & quot; значение = & Quot; $ {jdbc.password} & Quot; / & GT; & Л; / & боб GT;
У моего applicationContext.xml есть: & lt; идентификатор компонента = & quot; countryDao & quot; class = & quot; com.crimetrack.jdbc.JdbcCountryDAO & quot; & lt; имя свойства = & quot; dataSource & quot; исх = & Quot; Datasource & Quot; / & GT; & Lt; / & боба GT;
Другое решение состоит в том, чтобы внедрить шаблон (который является потокобезопасным !!) вместо настройкиDaoSupport: stackoverflow.com/a/21992433/173149
Да, это так. Мы внедряем источник данных через конструктор arg.
я использовал первый вариант, но я получаю java.lang.IllegalArgumentException: «источник данных»; или "jdbcTemplate" требуется, вы можете помочь?
0

что внедрение источника данных в качестве конструктора в ваш DAO - это ненужный шаг кодирования. Почему бы не добавить источник данных в XML конфигурации Spring в шаблон 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. Вы получите исключение Runtime здесь

Похожие вопросы