springboot使用jpa进行数据库操作报错?

按照各种博客和《springboot揭秘》中的介绍配置了项目,就是没法jpa来操作数据库,

报错信息

我就是写了个最简单的demo,继承了Repository的接口就是找不到,报错如下:

***************************
APPLICATION FAILED TO START
***************************

Description:

Field personDao in com.llh.demo.controller.TestController required a bean of type 'com.llh.demo.dao.PersonDao' that could not be found.


Action:

Consider defining a bean of type 'com.llh.demo.dao.PersonDao' in your configuration.


Process finished with exit code 1

代码信息

项目结构

项目结构

pom.xml里的依赖如下

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- MYSQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- Spring Boot JPA -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

实体类如下

@Entity
public class Person {
    @Id
    @GeneratedValue
    private Long id;
    private String name;

    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Repository接口

@Repository()
public interface PersonDao extends CrudRepository<Person,Long> {
}

controller

@RestController
public class TestController {

    @Autowired
    PersonDao personDao;
    @RequestMapping("/test")
    public String test(){
        personDao.save(new Person("kljdfs"));
        personDao.save(new Person("sdklj"));
        return "kdsl";
    }
}

启动类

@SpringBootApplication
@ComponentScan(basePackages = {"com.llh.demo","com.llh.demo.dao"})
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

application.properties配置

spring.datasource.url=jdbc:mysql:////test?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jackson.serialization.indent_output=true
阅读 5.4k
3 个回答

在启动类上加上了@EnableJpaRepositories(basePackages = "com.llh.dao")注解就不报这个错了。但引发了另一个错误。

事实证明,这些奇怪的问题是可以通过删库来解决的。
把maven仓库的位置改到另一个空文件夹里,让maven自己去下jar包,就可以解决这些劳什子问题了。

总结下来就是,问题太奇怪可以试试删库,没什么是删库解决不了的问题,如果有,那就再装次系统。

@Repository 不是 @Repository()

另外,要 extends JPA 不是要用 extends JpaRepository<Person, Long> 吗?

Person应该是database的 structure 对吧,应该要有@Column,@Table 才对啊

Person class也要implements Serializable

添加以下代码重启试试

@SpringBootApplication
@ComponentScan(basePackages = {"com.llh.demo","com.llh.demo.dao"})
@ServletComponentScan // 扫描使用注解方式的servlet
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题