繁体   English   中英

如何使用spring连接到我的数据库并进行测试?

[英]how can I connect to my database with spring and test it?

我正在尝试为我的春季项目创建连接,这非常简单。

我想在application.properties上创建配置字段。 我尝试了spring.datasource ,但没有收到任何错误,但仍然没有得到任何信息,只是空指针...我认为连接没有正确建立。

这是我pom的一部分,具有以下依赖性:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.2.1.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.35</version>
    </dependency>

和我的财产:

server.port=80
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database
jdbc.username=user
jdbc.password=password

我没有收到任何错误,但是当我查询数据库时,我总是得到一个空指针,这使我认为无法正常工作,如何配置它呢?

谢谢

编辑:

我的配置类

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);

    }

}

控制器

@Autowired
private MyService myService;


@RequestMapping("/")
public String index() {
    User myUser = myService.findUserById(1L);
    System.out.println(myUser);
    return myUser.getFirstName();
}

我的服务实施

@Service
public class MyServiceImpl implements MyService {

    @Autowired
    UserRepository userRepository;


    public User findUserById(Long id){
        return userRepository.findOne(id);
    };
}

我的实体

@Entity
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    private String firstName;
    private String lastName;


    public Long getId() {
        return id;
    }

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

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

}

还有我的资料库

public interface UserRepository extends CrudRepository<User, Long> {

    //User findOne(Long id); this is a default method
}

错误:

我总是得到空指针,即使数据存在也是如此。如果我更改了错误的数据库密码,我也不会得到任何错误。

1)请从pom中删除以下依赖项,因为它可能会让SpringBoot使用h2而不是mysql,这会导致即使使用错误的mysql密码也看不到任何错误。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
</dependency>

2)在application.properties中,请使用:

spring.datasource.url=jdbc:mysql://localhost:3306/database
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

这些属性名称可以从SpringBoot文档中找到: http ://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html:

正确的数据源URL为:

jdbc:mysql://HostName:Port(3306 is the default)/DBName

您在存储库上缺少@Repository批注。 添加它,看看是否适合您。

如果不,
1.共享您获得的完整堆栈跟踪。
2.另外,您是否可以到达控制器端点?

我注意到您的实体未实现Serializable接口。

如果这不是问题,请查看github存储库中的spring boot示例以供参考。

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-data-jpa/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM