Spring JDBCTemplate.Исключение нулевого указателя - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь настроить веб-сайт SpringMVC с нуля, но я зашел в тупик.

Я использую автопроводку для создания экземпляра JdbcTemplate с DataSource, но каким-то образом получаюИсключение нулевого указателя.Я буду признателен за вашу помощь в этом.

Мой AppConfig выглядит следующим образом:

@Configuration
@ComponentScan
public class AppConfig {
    @Bean
    public DriverManagerDataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/onlinelibrary");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        return dataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
    /*Deleted this code, still doesn't work
    @Bean
    public Book Book() {
        return new Book();
    }
    */
}

Моя книга Класс выглядит следующим образом:

@Component
public class Book {
    private JdbcTemplate jdbcTemplate;
    private String title;
    private String author;
    private String isbn;

    public Book() {

    }

    @Autowired
    public Book(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public ModelMap getBooks() {
        ModelMap model = new ModelMap();
        String sql = "SELECT * FROM Books";
        model.put("data", jdbcTemplate.queryForList(sql));
        return model;
    }
}

И этопечально известное исключение NullPointer: NullPointerException

Любая помощь будет принята с благодарностью.Я, вероятно, забыл что-то сделать, но я не могу решить это сам, и я не могу найти ничего в StackOverflow, которое также помогло бы мне (хотя я уже прочитал много статей).

ОБНОВЛЕНИЕ С БОЛЕЕ ДАННЫМИ:

Моя структура проекта следующая:

Project structure

И я использую КнигуОбъект в этом контроллере:

@Controller
public class BookController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String getBookData(Book book, ModelMap model) {
        model.put("data", book.getBooks());
        return "BookView";
    }
}

1 Ответ

0 голосов
/ 08 октября 2018

Если у вас есть @Component над классом, это означает, что Spring создаст для вас Bean-компонент, если ваш компонентный сканер сканирует Book class.Вам не нужно

@Bean
public Book Book() {
    return new Book();
}

Это из-за этого бина, которому не вставлено jdbcTemplate, которое вызывает исключение NullPointerException.

Обновление:

Ваше понимание опружинный впрыск не так.Я обновил код контроллера, который должен работать.

@Controller
public class BookController {

    @Autowired
    Book book;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String getBookData(ModelMap model) {
        model.put("data", book.getBooks());
        return "BookView";
    }
}

Обновление: сканирование компонентов

@ComponentScan(basePackages = "models")
public class AppConfig {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...