【发布时间】:2018-12-09 22:51:15
【问题描述】:
我是 Spring Boot 新手,目前正在学习本教程 (https://www.callicoder.com/spring-boot-rest-api-tutorial-with-mysql-jpa-hibernate/)。我设法创建了一个可以查询 getAll 和 addOne 表的 api。问题是它没有在这些查询上使用现有表。相反,我的代码会生成新表并在该表中执行查询。如何配置我的项目以使用我的原始表?
我想在这个例子中用作数据源的数据库表。我已经在这个表中存储了一行数据。
mysql> show columns from palauteUser;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| userUUID | varchar(30) | NO | PRI | NULL | |
| firstName | varchar(30) | YES | | NULL | |
| lastName | varchar(30) | YES | | NULL | |
| email | varchar(30) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
spring boot 生成的数据库表
mysql> show columns from palaute_user;
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| useruuid | varchar(255) | NO | PRI | NULL | |
| email | varchar(255) | YES | | NULL | |
| first_name | varchar(255) | YES | | NULL | |
| last_name | varchar(255) | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+
项目 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fi.oppari.mysql.service</groupId>
<artifactId>SpringService</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SpringService</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties 文件
## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.url = jdbc:mysql://localhost:3306/oppariDB?useSSL=false
spring.datasource.username = root
spring.datasource.password = root
spring.jpa.show-sql=true
## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update
server.port=9090
模型类
package fi.oppari.mysql.service.SpringService.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "palauteUser")
public class PalauteUser {
@Id
private String userUUID;
@Column(name = "firstName")
private String firstName;
@Column(name = "lastName")
private String lastName;
@Column(name = "email")
private String email;
public String getUserUUID() {
return userUUID;
}
public void setUserUUID(String userUUID) {
this.userUUID = userUUID;
}
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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
存储库接口:
package fi.oppari.mysql.service.SpringService.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import fi.oppari.mysql.service.SpringService.model.PalauteUser;
@Repository
public interface PalauteUserRepository extends JpaRepository<PalauteUser, String>{
}
控制器:
package fi.oppari.mysql.service.SpringService.controller;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import fi.oppari.mysql.service.SpringService.model.PalauteUser;
import fi.oppari.mysql.service.SpringService.repository.PalauteUserRepository;
@RestController
@RequestMapping("/api")
public class PalauteUserController {
@Autowired
PalauteUserRepository palauteUserRepository;
@GetMapping("/all")
public List<PalauteUser> getAll() {
System.out.println("Getting all");
return palauteUserRepository.findAll();
}
@PostMapping("/addOne")
public PalauteUser addUser(@Valid @RequestBody PalauteUser user) {
return palauteUserRepository.save(user);
}
}
在 mvn spring-boot:run 命令之后,我使用邮递员和 GET localhost:9090/api/all 返回空数组。使用 json 数据 POST localhost:9090/api/addOne 也成功,它将信息添加到 palaute_user 表。
欢迎任何关于这个问题的建议,我提前感谢他们! :)
【问题讨论】:
-
你只尝试过小写吗?
@Table(name = "palauteuser") -
您好!更改后我得到错误 no table exists with palauteuser Edit1 :在我将表名从 palauteUser 更改为 palauteuser 后它可以工作,但是还有其他方法可以解决这个问题吗?
标签: java mysql spring spring-boot