.. 中构造函数的参数 0 需要类型为 org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate 的 bean 找不到
Parameter 0 of constructor in .. required a bean of type org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate could not be found
我写了一个简单的待办事项应用程序(基于apress pro spring boot中的内容,我们在其中使用jdbc来处理数据库,在存储库中我们有以下代码来处理h2数据库
package com.apress.todo.repository;
import java.sql.ResultSet;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import com.apress.todo.domain.ToDo;
@Repository
public class ToDoRepository implements CommonRepository<ToDo> {
private static final String SQL_INSERT ="insert into todo (id,\r\n" +
"description, created, modified, completed) values (:id,:description,\r\n" +
":created,:modified,:completed)";
private static final String SQL_QUERY_FIND_ALL = "select id,"
+"description, created, modified, completed from todo";
private static final String SQL_QUERY_FIND_BY_ID = SQL_QUERY_FIND_ALL +
" where id = :id";
private static final String SQL_UPDATE = "update todo set description ="
+":description, modified = :modified, completed = :completed"
+"where id = :id";
private static final String SQL_DELETE = "delete from todo where id = :id";
private final NamedParameterJdbcTemplate jdbcTemplate;
public ToDoRepository(NamedParameterJdbcTemplate jdbcTemplate) {//HERE IS WHERE THE PROBLEM IS
System.out.println("hi masoud");
this.jdbcTemplate = jdbcTemplate;
}
private RowMapper<ToDo> toDoRowMapper = (ResultSet rs, int rowNum) -> {
ToDo toDo = new ToDo();
toDo.setId(rs.getString("id"));
toDo.setDescription(rs.getString("description"));
toDo.setModified(rs.getTimestamp("modified").toLocalDateTime());
toDo.setCreated(rs.getTimestamp("created").toLocalDateTime());
toDo.setCompleted(rs.getBoolean("completed"));
return toDo;
};
下面是我的主要 spring 启动应用程序 运行ner
package com.apress.todo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TodoInMemoryApplication {
public static void main(String[] args) {
SpringApplication.run(TodoInMemoryApplication.class, args);
}
}
但是当我 运行 使用 spring 引导命令行界面的应用程序时,我将收到以下错误:
说明:
Parameter 0 of constructor in com.apress.todo.repository.ToDoRepository required a bean of type 'org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate' in your configuration.
书中没有更多解释。
我不知道你书中的例子是什么样的,但我会尽力帮助你。看,你声明了一个字段 private final NamedParameterJdbcTemplate jdbcTemplate;
。您希望以某种方式 spring 来初始化它。为此,您必须声明 @Bean
并在 NamedParameterJdbcTemplate
中输入 @Configuration
class 或创建一个 @Component
class 扩展 NamedParameterJdbcTemplate
.或者扩展 NamedParameterJdbcDaoSupport
并通过 getNamedParameterJdbcTemplate();
获取
实际上以你的例子,添加 spring-boot-starter-jdbc
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
并添加属性,例如
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
应该根据tutorial
解决这个问题
我写了一个简单的待办事项应用程序(基于apress pro spring boot中的内容,我们在其中使用jdbc来处理数据库,在存储库中我们有以下代码来处理h2数据库
package com.apress.todo.repository;
import java.sql.ResultSet;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import com.apress.todo.domain.ToDo;
@Repository
public class ToDoRepository implements CommonRepository<ToDo> {
private static final String SQL_INSERT ="insert into todo (id,\r\n" +
"description, created, modified, completed) values (:id,:description,\r\n" +
":created,:modified,:completed)";
private static final String SQL_QUERY_FIND_ALL = "select id,"
+"description, created, modified, completed from todo";
private static final String SQL_QUERY_FIND_BY_ID = SQL_QUERY_FIND_ALL +
" where id = :id";
private static final String SQL_UPDATE = "update todo set description ="
+":description, modified = :modified, completed = :completed"
+"where id = :id";
private static final String SQL_DELETE = "delete from todo where id = :id";
private final NamedParameterJdbcTemplate jdbcTemplate;
public ToDoRepository(NamedParameterJdbcTemplate jdbcTemplate) {//HERE IS WHERE THE PROBLEM IS
System.out.println("hi masoud");
this.jdbcTemplate = jdbcTemplate;
}
private RowMapper<ToDo> toDoRowMapper = (ResultSet rs, int rowNum) -> {
ToDo toDo = new ToDo();
toDo.setId(rs.getString("id"));
toDo.setDescription(rs.getString("description"));
toDo.setModified(rs.getTimestamp("modified").toLocalDateTime());
toDo.setCreated(rs.getTimestamp("created").toLocalDateTime());
toDo.setCompleted(rs.getBoolean("completed"));
return toDo;
};
下面是我的主要 spring 启动应用程序 运行ner
package com.apress.todo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TodoInMemoryApplication {
public static void main(String[] args) {
SpringApplication.run(TodoInMemoryApplication.class, args);
}
}
但是当我 运行 使用 spring 引导命令行界面的应用程序时,我将收到以下错误: 说明:
Parameter 0 of constructor in com.apress.todo.repository.ToDoRepository required a bean of type 'org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate' in your configuration.
书中没有更多解释。
我不知道你书中的例子是什么样的,但我会尽力帮助你。看,你声明了一个字段 private final NamedParameterJdbcTemplate jdbcTemplate;
。您希望以某种方式 spring 来初始化它。为此,您必须声明 @Bean
并在 NamedParameterJdbcTemplate
中输入 @Configuration
class 或创建一个 @Component
class 扩展 NamedParameterJdbcTemplate
.或者扩展 NamedParameterJdbcDaoSupport
并通过 getNamedParameterJdbcTemplate();
实际上以你的例子,添加 spring-boot-starter-jdbc
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
并添加属性,例如
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
应该根据tutorial
解决这个问题