如何在不使用 CrudRepository 的情况下使 java spring 引导应用程序中定义的实体反映在数据库中
How to get the entities defined within the java spring boot application to be reflected within a database without the use of CrudRepository
我正在使用 spring 引导和 mySQL 构建 Web 应用程序。我一直在关注一个视频指南系列,但作者没有展示他是如何设置数据库的。
这是我无法复制结果的视频:
https://www.youtube.com/watch?v=KBfiEL-FomQ&index=7&list=PL2OrQJM8zmZ0k-S5FfR2qrwgupnaINO0m
我使用 mySQL workbench 创建了一个连接和模式。
我完全按照他的方式配置了应用程序,但在他的视频中,在应用程序中创建的实体在他的架构中显示为表格,而我的则没有。
我尝试从他的 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 启动应用程序,实体将显示为我在 mySQL 本地主机服务器中创建的模式中的表。
我得到的是我的数据库服务器中没有任何显示。无论我是否创建了架构。
当我 运行 服务器离线的应用程序时,我什至没有在 IDE 控制台中收到错误消息。
所以我假设您确实从 here 在 Windows 上下载并安装了 MySQl 的 MySQL 社区版本。
我没有关注或观看此视频指南,但我可以向您指出官方 Spring 文档 here。
设置数据库并为 Spring 应用程序添加用户后,您将需要获取连接字符串,就像在 application.properties 文件中所做的那样。由于我没有使用 SSL 的粗略设置,我确实遇到了一些警告和失败,因此请将 ?useSSL=false
添加到您的连接中。
同时将你的 spring.jpa.hibernate.ddl-auto=create-drop
设置为 create 或 create-drop(我使用 create-drop 仅用于测试),否则 Hibernate 将无法创建表,只能更新它们。
所以我确实按预期做到了 运行。
我之前 运行 在尝试使用 Maven 构建项目时遇到错误,并向我的 pom.xml 文件添加了 3 个依赖项。这让我的项目得以构建 运行,但没有更新数据库。
我刚刚再次注释掉那些依赖项,但这一次,它构建正确,并且 运行 符合预期。
如果您对它们感到好奇,这些是现在注释的依赖项:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.4.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.3.Final</version>
</dependency>
我正在使用 spring 引导和 mySQL 构建 Web 应用程序。我一直在关注一个视频指南系列,但作者没有展示他是如何设置数据库的。
这是我无法复制结果的视频: https://www.youtube.com/watch?v=KBfiEL-FomQ&index=7&list=PL2OrQJM8zmZ0k-S5FfR2qrwgupnaINO0m
我使用 mySQL workbench 创建了一个连接和模式。 我完全按照他的方式配置了应用程序,但在他的视频中,在应用程序中创建的实体在他的架构中显示为表格,而我的则没有。
我尝试从他的 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 启动应用程序,实体将显示为我在 mySQL 本地主机服务器中创建的模式中的表。
我得到的是我的数据库服务器中没有任何显示。无论我是否创建了架构。 当我 运行 服务器离线的应用程序时,我什至没有在 IDE 控制台中收到错误消息。
所以我假设您确实从 here 在 Windows 上下载并安装了 MySQl 的 MySQL 社区版本。 我没有关注或观看此视频指南,但我可以向您指出官方 Spring 文档 here。
设置数据库并为 Spring 应用程序添加用户后,您将需要获取连接字符串,就像在 application.properties 文件中所做的那样。由于我没有使用 SSL 的粗略设置,我确实遇到了一些警告和失败,因此请将 ?useSSL=false
添加到您的连接中。
同时将你的 spring.jpa.hibernate.ddl-auto=create-drop
设置为 create 或 create-drop(我使用 create-drop 仅用于测试),否则 Hibernate 将无法创建表,只能更新它们。
所以我确实按预期做到了 运行。 我之前 运行 在尝试使用 Maven 构建项目时遇到错误,并向我的 pom.xml 文件添加了 3 个依赖项。这让我的项目得以构建 运行,但没有更新数据库。
我刚刚再次注释掉那些依赖项,但这一次,它构建正确,并且 运行 符合预期。
如果您对它们感到好奇,这些是现在注释的依赖项:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.4.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.3.Final</version>
</dependency>