2012-05-13 3 views
2

Использование аннотаций в даоspring3-аннотаций-JdbcDaoSupport

@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» был определен в другой «весна-XML».

Как решить эту проблему с помощью аннотации: «« dataSource »или« jdbcTemplate »требуется»

+2

Обход здесь: http://escrow.aliexpress.com //forum.springsource .org/showthread.php? 111432-Why-is-setDatSource() - метод-in-JdbcDaoSupport-final –

ответ

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); 
    } 
} 
+0

, если вы используете первый подход, DataSource ссылается на источник данных, определенный в applicationContext.xml: <свойство name = "driverClassName" value = "$ {jdbc.driverClassName}" /> devdar

+0

Да, так оно и есть. Мы вводим dataSource через конструктор arg. – gkamal

+0

Я использовал первый вариант, но я получаю java.lang.IllegalArgumentException: требуется 'dataSource' или 'jdbcTemplate', вы можете помочь? – devdar

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

+0

JdbcDaoSupport требует, чтобы свойство jdbctemplate вводилось. Вы получите исключение Runtime здесь – fuzzy28