目前,我正在开发一个Web应用程序使用Angular,Sping Boot ,MySQL。我需要在MySQL中自动创建和更新数据库和表。但我的计算机没有自动创建数据库,并给出了一个后端错误“未知数据库db”。然后我手动创建数据库。然后后端正确构建,但仍然没有创建表。
应用程序属性代码:
server.error.whitelabel.enabled=false
spring.datasource.url=jdbc:mysql://localhost:3306/db?useSSL=false
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQLDialect
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
customer.java 代码:
package com.Manipulus.arctic.customer.model;
import jakarta.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "customers")
public class Customer implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false,updatable = false)
private long id;
@Column(name = "nic_number" )
private String nic_number;
@Column(name = "customer_name")
private String name;
@Column(name = "contact_number")
private int contactNumber;
@Column(name = "address")
private String address;
@Column(name = "contact_person_name")
private String contactPersonName;
@Column(name = "designation")
private String designation;
@Column(name = "email")
private String email;
@Column(nullable = false,updatable = false)
private String customerCode;
public String getCustomerCode() {
return customerCode;
}
public void setCustomerCode(String customerCode) {
this.customerCode = customerCode;
}
public Customer(){
}
public Customer(String nic_number, String name, int contactNumber, String address, String contactPersonName, String designation, String email,String customerCode) {
this.nic_number = nic_number;
this.name = name;
this.customerCode =customerCode;
this.contactNumber = contactNumber;
this.address = address;
this.contactPersonName = contactPersonName;
this.designation = designation;
this.email = email;
}
public String getNic_number() {
return nic_number;
}
public void setNic_number(String nic) {
this.nic_number = nic;
}
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;
}
public int getContactNumber() {
return contactNumber;
}
public void setContactNumber(int contactNumber) {
this.contactNumber = contactNumber;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getContactPersonName() {
return contactPersonName;
}
public void setContactPersonName(String contactPersonName) {
this.contactPersonName = contactPersonName;
}
public String getDesignation() {
return designation;
}
public void setDesignation(String designation) {
this.designation = designation;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString(){
return "Customer{" +
"id=" + id +
"nic_number=" + nic_number +
"name=" +name +
"contactNumber=" +contactNumber +
"address="+ address +
"contactPersonName="+contactPersonName+
"designation="+ designation +
"email="+email+
'}';
}
}
CustomerResource.java 代码:
package com.Manipulus.arctic.customer;
import com.Manipulus.arctic.customer.model.Customer;
import com.Manipulus.arctic.customer.service.CustomerService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/customer")
public class CustomerResource {
private final CustomerService customerService;
public CustomerResource(CustomerService customerService) {
this.customerService = customerService;
}
@GetMapping("/all")
public ResponseEntity<List<Customer>> getAllCustomer(){
List<Customer> customers = customerService.findAllCustomers();
return new ResponseEntity<>(customers, HttpStatus.OK);
}
@GetMapping("/find/{id}")
public ResponseEntity<Customer> getCustomerById(@PathVariable("id") Long id){
Customer customer = customerService.findCustomerById(id);
return new ResponseEntity<>(customer, HttpStatus.OK);
}
@PostMapping("/add")
public ResponseEntity<Customer> addCustomer(@RequestBody Customer customer){
Customer newCustomer = customerService.addCustomer(customer);
return new ResponseEntity<>(newCustomer, HttpStatus.CREATED);
}
@PutMapping("/update")
public ResponseEntity<Customer> updateCustomer(@RequestBody Customer customer){
Customer updateCustomer = customerService.updateCustomer(customer);
return new ResponseEntity<>(updateCustomer, HttpStatus.CREATED);
}
@DeleteMapping ("/delete/{id}")
public void deleteCustomer(@PathVariable("id") Long id){
customerService.deleteCustomerById(id);
}
// return new ResponseEntity<>(HttpStatus.OK);
// @DeleteMapping("/employees/{id}")
// public ResponseEntity<Map<String,Boolean>> deleteEmployee(@PathVariable long id){
// Employee emp = emp_repo.findById(id).orElseThrow(() -> new ResourceNotFoundException("Employee not exist with id: "+id));
//
// emp_repo.delete(emp);
// Map<String,Boolean> response = new HashMap<>();
// response.put("Deleted",Boolean.TRUE);
// return ResponseEntity.ok(response);
// }
}
我使用的Java版本是18。我的前端或后端在编译或运行时没有显示任何类型的错误。但在Web应用程序的界面上,它显示“http://localhost:8080/customer/all的Http失败响应:0未知错误”我认为我的后端无法正确连接MySQL。而且我是一个初学者。所以我请求帮助我解决这个错误。
1条答案
按热度按时间rhfm7lfc1#
Spring Data JPA不会为您创建数据库。您必须在运行应用程序之前确保数据库存在,因此您必须手动创建它。这就是为什么您会看到“unknown database db”错误。
spring.jpa.hibernate.ddl-auto=update
上述配置将使hib检查您的实体和架构之间的差异已经存在的数据库。如果发现任何差异,将更新您的表。这也包括创建一个新的实体保存在您的数据库中。
关于你的第二个问题
http://localhost:8080/customer/all的Http失败响应:0未知错误
您是否为此端点创建了一个REST端点?请仔细检查服务器是否正在运行,端点URL是否正确。我建议您下载一个名为Postman的工具,它提供了一种更快的方法来测试您的API端点。