Я новичок в Spring MVC и JDBCTemplate, и мне очень нужна помощь в этом. Я объявил следующее в applicationContext.xml:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://" />
<property name="username" value="user" />
<property name="password" value="pwd" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
В моем классе DAOImpl у меня есть следующий код:
@Repository
public class ABCDAOImpl implements ABCDAO
{
private String INSERT_SQL = null;
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(DataSource dataSource)
{
this.jdbcTemplate = new JdbcTemplate( dataSource );
}
@Override
public boolean insertDataInDataBase(final Object obj)
{
boolean insertSuccessful = false;
INSERT_SQL = "INSERT INTO XXX " +
"(AA, BB, CC, DD, EE, " +
"FF, GG, HH, II) VALUES (?,?,?,?,?,?,?,?,?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator()
{public PreparedStatement createPreparedStatement(Connection connection)
throws SQLException
{
PreparedStatement ps = null;
ps = connection.prepareStatement(INSERT_SQL);
ps.setString(1, xx);
ps.setString(2, xx);
ps.setString(3, xx);
ps.setString(4, xx);
ps.setString(5, xx);
ps.setString(6, xx;
ps.setString(7, xx);
ps.setString(8, xx);
ps.setString(9, xx);
return ps;
}}, keyHolder);
return insertSuccessful;
}
}
Тестовый класс:
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class ABCDAOImplTest
{
private Object object = new Object();
private ABCDAOImpl abcDAOImpl;
@Before
public void setup()
{
object.setAllVaribles();
abcDAOImpl = new ABCDAOImpl();
}
@Test
public void testRepositoryInsert()
{
System.out.println(abcDAOImpl.insertDataInDataBase(object));
assertTrue(abcDAOImpl.insertDataInDataBase(object));
}
}
Затем я использую jdbcTemplate для выполнения оператора вставки с помощью PreparedStatementCreator.
Теперь я пытаюсь проверить (без насмешек, я жестко запрограммировал значения только для проверки...), работает ли этот код или нет? Когда я запускаю этот тест, он дает мне NPE, говорящий, что jdbcTemplate равен нулю. Что-то не так с моим кодом или что-то с тем, как я его тестирую? Любая помощь будет принята с благодарностью.
С новым годом :)
PS. Я аннотировал класс Test с помощью @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:applicationContext.xml"}) только после комментария от @Pradeep. И теперь я получаю другое исключение: «Не удалось загрузить ApplicationContext».
DAOImpl
класс покрытcomponent-scan
? - person Reimeus   schedule 01.01.2013setup
. Вы создаете новый объект дляABCDAOImpl
. Но когда вы запускаете контейнер Spring на сервере, уже создаете объект дляABCDAO
. Так что просто поставьте@Autowired ABCDAOImpl
вместо создания с новым ключевым словом и попробуйте. - person SRy   schedule 02.01.2013applicationContext.xml
файлом? У вас есть путь сканирования компонентов в конфигурации? - person Arun P Johny   schedule 02.01.2013