[英]Error connecting to local MySQL database from spring boot application
[英]Spring Boot not loading entities from local MySQL database
我正在尝试配置Spring Boot(1.4.2版)以使用我的本地主机MySQL数据库,但是我的配置有问题。 您能否看一下这个非常简单的示例,然后告诉我发生了什么?
我已经准备好所有必需的依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
我的实体:
@Entity
@Table(name = "greetings")
public class Greeting {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "greeting_id")
private long id;
@Column(name = "text")
private String text;
// getters and setters here
}
仓库:
@Repository
public interface GreetingRepository extends JpaRepository<Greeting, Long> {
}
控制器:
@RestController
@RequestMapping("/hello")
public class GreetingsController {
@Autowired
private GreetingRepository repo;
@RequestMapping(method = RequestMethod.GET)
public Collection<Greeting> getGreetings() {
return repo.findAll();
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Greeting getGreeting(@PathVariable Long id) {
return repo.findOne(id);
}
}
application.properties:
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
spring.datasource.url=jdbc:mysql://localhost/example
spring.datasource.username=root
spring.datasource.password=secret
spring.datasource.driverClassName=com.mysql.jdbc.Driver
下表在MySQL本地主机上运行了一个名为“ example”的MySQL数据库(以及我在其中插入的几条记录):
mysql> describe greetings;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| greeting_id | bigint(20) | NO | PRI | NULL | auto_increment |
| text | varchar(255) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
编辑:我更正了我的控制器,并更新了我的问题。 问题是我的应用程序使用内存中的数据存储而不是MySQL数据库。 如果我创建POST端点并将新实体插入数据库,则可以检索它,但是由于我没有从那里获取任何数据,因此它似乎与现有数据库不同。
EDIT2:由spring.jpa.hibernate.ddl-auto=update
解决
我在您的代码上看到多个错误。 第一个是@RestController
批注。 查看文档 。
您输入的值(“ / hello”)不是您所期望的...这不是@RequestMapping
批注中的请求映射处理程序名称。 代替这种用法:
@RestController
@RequestMapping("/hello")
public class GreetingsController {
@Autowired
private GreetingRepository repo;
@RequestMapping(method = RequestMethod.GET)
public Collection<Greeting> getGreetings() {
return repo.findAll();
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Greeting getGreeting(@PathVariable long id) {
return repo.findOne(id);
}
}
实际上,我认为这将解决您的问题。 第二个建议是对id
字段的建议-使用Long Wrapper类型而不是long基本类型。
与数据有关的第二个问题是属性: spring.jpa.hibernate.ddl-auto=create-drop
这将在会话结束时删除架构。 使用spring.jpa.hibernate.ddl-auto=update
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.