我编写了一个使用Spring Boot和Spring JDBC的程序。由于某种原因,我的NamedParameterJdbcTemplate
上有一个NullPointerException
。
DAOImpl:
@Repository
@Transactional
public class UserDaoImpl implements UserDao {
private NamedParameterJdbcTemplate jdbcTemplate;
private static final TABLE_NAME = "users";
@Autowired
private void setjdbcTemplate(NamedParameterJdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
@Transactional(readOnly = true)
public User getUser(String userName) {
String userQuery = "SELECT * FROM " + TABLE_NAME + " WHERE user_name LIKE :username";
MapSqlParameterSource parameterSource = new MapSqlParameterSource();
parameterSource.addValue("username", userName);
return jdbcTemplate.queryForObject(userQuery, parameterSource, new userRowMapper());
}
}
application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/testing_schema
spring.datasource.username=****
spring.datasource.password=****
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
据我从Spring文档中得知,这应该足够了。此外,这个问题的答案解释说,一切都应该为我创造,我只需要自动装配。然而,我不明白为什么这仍然返回null。我很感激你的帮助。
我明白了。在我的调用函数中,我创建了dao的一个实例,而不是自动装配它。
所以,我只需要改变
UserDaoImpl userDao = new UserDaoImp();
@Autowired
UserDaoImpl userDao;