如何在不使用 CrudRepository 的情况下将 java spring boot 应用程序中定义的实体反映在数据库中
Posted
技术标签:
【中文标题】如何在不使用 CrudRepository 的情况下将 java spring boot 应用程序中定义的实体反映在数据库中【英文标题】:How to get the entities defined within the java spring boot application to be reflected within a database without the use of CrudRepository 【发布时间】:2019-05-27 08:58:00 【问题描述】:我正在使用 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 控制台中都没有收到错误。
【问题讨论】:
【参考方案1】:所以我假设您确实从here 下载并安装了 Windows 上的 MySQL Community 版本的 MySQl。 我没有关注或观看此视频指南,但我可能会将您指向 Spring 官方文档 here。
一旦您设置好您的数据库并为您的 Spring 应用程序添加了一个用户,您将需要获取您的连接字符串,就像您在 application.properties 文件中所做的那样。由于我没有 SSL 的粗略设置,我确实遇到了一些警告和失败,因此请在您的连接中添加 ?useSSL=false
。
还将您的spring.jpa.hibernate.ddl-auto=create-drop
设置为create 或create-drop(我使用create-drop 仅用于测试),否则Hibernate 将无法创建表,只能更新它们。
【讨论】:
在您链接的指南中,他们在 interface 中使用了 CrudRepository。我想不使用它。我将尝试再次使用 CrudRepository,但我希望代码能够像视频中那样运行。它增加了更少的代码和复杂性。如果你想从视频中查看结果,就在这个视频的第一分钟:link@hille【参考方案2】:所以我确实让它按预期运行。 我之前在尝试使用 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>
【讨论】:
以上是关于如何在不使用 CrudRepository 的情况下将 java spring boot 应用程序中定义的实体反映在数据库中的主要内容,如果未能解决你的问题,请参考以下文章
我如何从 crudrepository 获取 entitymanager
使用 Spring Data JDBC 和 CrudRepository 接口的多个数据源
如何使用CrudRepository避免额外的json获取记录
Spring CrudRepository deleteAll()什么都不做
如何修复CrudRepository.save(java.lang.Object)是springboot中的无法访问方法?