Spring JDBCTemplate。空指针异常
Spring JDBCTemplate. Null pointer exception
我正在尝试从头开始建立一个 SpringMVC 网站,但我遇到了死胡同。
我正在使用自动装配将 JdbcTemplate 与数据源实例化,但不知何故我得到了空指针异常。非常感谢你的帮助。
我的 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();
}
*/
}
我的书class如下:
@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;
}
}
这就是臭名昭著的空指针异常:
如有任何帮助,我们将不胜感激。我可能忘了做某事,但我自己无法解决,而且我在 Whosebug 上也找不到任何对我有帮助的东西(尽管我现在已经阅读了很多文章)。
更新更多数据:
我的项目结构是下一个:
我在这个控制器中使用 Book 对象:
@Controller
public class BookController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String getBookData(Book book, ModelMap model) {
model.put("data", book.getBooks());
return "BookView";
}
}
当您在 class 上有 @Component
时,这意味着 Spring 将为您创建一个 Bean,前提是您的组件扫描器正在扫描 Book class。你不需要
@Bean
public Book Book() {
return new Book();
}
这是因为这个没有注入 jdbcTemplate
的 bean 抛出 NullPointerException。
更新:
你对spring注入的理解是错误的。我已经更新了应该工作的控制器代码。
@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 {
我正在尝试从头开始建立一个 SpringMVC 网站,但我遇到了死胡同。
我正在使用自动装配将 JdbcTemplate 与数据源实例化,但不知何故我得到了空指针异常。非常感谢你的帮助。
我的 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();
}
*/
}
我的书class如下:
@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;
}
}
这就是臭名昭著的空指针异常:
如有任何帮助,我们将不胜感激。我可能忘了做某事,但我自己无法解决,而且我在 Whosebug 上也找不到任何对我有帮助的东西(尽管我现在已经阅读了很多文章)。
更新更多数据:
我的项目结构是下一个:
我在这个控制器中使用 Book 对象:
@Controller
public class BookController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String getBookData(Book book, ModelMap model) {
model.put("data", book.getBooks());
return "BookView";
}
}
当您在 class 上有 @Component
时,这意味着 Spring 将为您创建一个 Bean,前提是您的组件扫描器正在扫描 Book class。你不需要
@Bean
public Book Book() {
return new Book();
}
这是因为这个没有注入 jdbcTemplate
的 bean 抛出 NullPointerException。
更新:
你对spring注入的理解是错误的。我已经更新了应该工作的控制器代码。
@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 {