首页 > 解决方案 > 如何在不使用 CrudRepository 的情况下将 java spring boot 应用程序中定义的实体反映在数据库中

问题描述

我正在使用 spring boot 和 mySQL 构建一个 Web 应用程序。我一直在关注这封信的视频指南系列,但作者没有展示他如何设置数据库。

这是我坚持复制结果的视频: https ://www.youtube.com/watch?v=KBfiEL-FomQ&index=7&list=PL2OrQJM8zmZ0k-S5FfR2qrwgupnaINO0m

我使用 mySQL 工作台创建了一个连接和模式。我完全按照他的方式配置了应用程序,但在他的视频中,应用程序中创建的实体在他的架构中显示为表,而我的则没有。

我尝试从他的 github 导入他的项目代码,然后运行它,但它再次没有在我的模式中创建表。

application.properties 配置如下:

spring.datasource.url = jdbc:mysql://localhost:3306/freshvotes
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.username=example_user
spring.datasource.password=password123

spring.jpa.database-platform=org.hibernate.dialect.MySQL57Dialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

spring.thymeleaf.cache=false

这是我创建的用户实体:

package com.freshvotes.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="users")
public class User {

private Long id;
private String username;
private String password;
private String name;

@Id @GeneratedValue (strategy=GenerationType.IDENTITY)
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}


}

预期的结果是,一旦我将应用程序作为 Spring Boot 应用程序运行,实体将显示为我在 mySQL 本地主机服务器中创建的模式中的表。

我得到的是我的数据库服务器中没有显示任何内容。无论我是否创建了架构。当我在服务器脱机的情况下运行应用程序时,我什至没有在 IDE 控制台中收到错误消息。

标签: javamysqlspring-bootspring-jdbc

解决方案


所以我假设你确实从这里下载并安装了 Windows 上的 MySQL Community 版本的 MySQl 。我没有关注或观看此视频指南,但我可能会在此处为您指出 Spring 官方文档。

设置好数据库并为 Spring 应用程序添加用户后,您将需要获取连接字符串,就像您在 application.properties 文件中所做的那样。由于我没有 SSL 的粗略设置,我确实遇到了一些警告和失败,因此请添加?useSSL=false到您的连接中。

还要将您的设置spring.jpa.hibernate.ddl-auto=create-drop为 create 或 create-drop(我使用 create-drop 仅用于测试),否则 Hibernate 将无法创建表,只能更新它们。


推荐阅读