Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 中构造函数的参数0。。找不到类型为org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate的必需bean_Java_Spring_Spring Boot_Dependency Injection_Spring Jdbc - Fatal编程技术网

Java 中构造函数的参数0。。找不到类型为org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate的必需bean

Java 中构造函数的参数0。。找不到类型为org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate的必需bean,java,spring,spring-boot,dependency-injection,spring-jdbc,Java,Spring,Spring Boot,Dependency Injection,Spring Jdbc,我已经编写了一个简单的todo应用程序(基于我们使用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; imp

我已经编写了一个简单的todo应用程序(基于我们使用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 boot命令行界面运行应用程序时,我将得到以下错误: 说明:

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.

书中没有更多的解释。

我不知道你书中的例子是什么样的,但我会尽力帮助你。看,你声明了一个字段
私有最终名称parameterjdbctemplate jdbcTemplate;
。不知怎的,你希望启动它。为了实现它,你必须用
NamedParamet>声明
@Bean
erJdbcTemplate
键入
@Configuration
类或创建一个
@组件
类扩展
NamedParameterJdbcTemplate
。或扩展
NamedParameterJdbcDaoSupport
并通过
getNamedParameterJdbcTemplate();

实际上,在您的示例中,添加
springbootstarterjdbc

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

应该根据解决此问题

您可以共享您的属性文件吗?您是否将starter
spring boot starter jdbc
作为依赖项?AFAIK spring boot在检测到连接时启动JdbcTemplate。您应该使用JdbcTemplate访问数据库。因此,在我的示例中,我必须实际设置application.properties创造一个豆子。谢谢,你帮了我很多。
<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=