仅适用于jhipster5.1.0
创建一个实体
请查看有关创建新JHipster应用程序的视频教程!
重要的是,如果您想“实时重载” JavaScript / TypeScript代码,则需要运行yarn start
。您可以转到“ 在开发中使用JHipster”页面以获取更多信息。
介绍
创建应用程序后,您将需要创建实体。例如,您可能要创建一个Author和Book实体。对于每个实体,您将需要:
- 数据库表
- Liquibase变更集
- JPA实体
- Spring Data JPA存储库
- Spring MVC REST控制器,具有基本的CRUD操作
- Angular路由器,组件和服务
- HTML视图
- 集成测试,以验证一切正常
- 性能测试,看一切是否顺利
如果您有多个实体,则可能需要在它们之间建立关系。为此,您将需要:
- 数据库外键
- 用于管理这种关系的特定JavaScript和HTML代码
“实体”子生成器将创建所有必要的文件,并为每个实体提供一个CRUD前端(请参阅Angular项目结构和React项目结构)。可以通过运行调用子生成器jhipster entity <entityName> --[options]
。可以通过键入以下内容找到这些选项的参考jhipster entity --help
以下是受支持的选项。
-
--table-name <table_name>
-默认情况下,JHipster将根据您的实体名称生成一个表名,如果您希望使用其他表名,则可以通过传递此选项来实现。 -
--angular-suffix <suffix>
-如果您希望所有Angular路线都具有自定义后缀,则可以使用此选项传递自定义后缀。 -
--regenerate
-这将重新生成现有实体,而不会提出任何问题。 -
--skip-server
-这将跳过服务器端代码,并且仅生成客户端代码。 -
--skip-client
-这将跳过客户端代码,并且仅生成服务器端代码。 -
--db
-跳过服务器端生成时指定数据库,否则无效。
JHipster UML和JDL Studio
本页介绍如何使用标准命令行界面通过JHipster创建实体。如果要创建许多实体,则可能更喜欢使用图形工具。
在这种情况下,有两个选项可用:
- JHipster UML,它允许您使用UML编辑器。
- JDL Studio,我们的在线工具,使用我们的领域特定语言JDL创建实体和关系。
如果您使用了JDL Studio:
-
您可以
import-jdl
通过运行子生成器从JDL文件生成实体jhipster import-jdl your-jdl-file.jh
。- 如果不想重新生成实体,则在导入JDL时,可以使用该
--json-only
标志跳过实体创建部分,仅在文件.jhipster
夹中创建json文件。
jhipster import-jdl ./my-jdl-file.jdl --json-only
- 默认情况下,
import-jdl
仅重新生成已更改的实体,如果要重新生成所有实体,则传递该--force
标志。请注意,这将覆盖您对实体文件的所有本地更改
jhipster import-jdl ./my-jdl-file.jdl --force
- 如果不想重新生成实体,则在导入JDL时,可以使用该
如果要使用JHipster UML代替
import-jdl
子生成器,则需要通过运行进行安装npm install -g jhipster-uml
,然后再运行jhipster-uml yourFileName.jh
。
实体字段
对于每个实体,您可以根据需要添加任意多个字段。您将需要输入字段名称及其类型,JHipster将为您生成所有所需的代码和配置,从Angular HTML视图到Liquibase更改日志。
这些字段不能在您使用的技术中包含保留的关键字。例如,如果您使用MySQL:
- 您不能使用Java保留关键字(因为您的代码将无法编译)
- 您不能使用MySQL保留关键字(因为数据库架构更新将失败)
栏位类型
JHipster支持许多字段类型。这种支持取决于您的数据库后端,因此我们使用Java类型来描述它们:Java String
将以不同的方式存储在Oracle或Cassandra中,这是JHipster的优势之一,可以为您生成正确的数据库访问代码。
-
String
:一个Java字符串。它的默认大小取决于基础后端(如果使用JPA,默认情况下为255),但是您可以使用验证规则进行更改(max
例如,大小为1024)。 -
Integer
:Java整数。 -
Long
:Java长。 -
Float
:Java浮点数。 -
Double
:Java Double。 -
BigDecimal
:一个java.math.BigDecimal对象,当您需要精确的数学计算时使用(通常用于财务操作)。 -
LocalDate
:一个java.time.LocalDate对象,用于正确管理Java中的日期。 -
Instant
:一个java.time.Instant对象,用于表示时间戳,即时间轴上的瞬时点。 -
ZonedDateTime
:一个java.time.ZonedDateTime对象,用于表示给定时区(通常是日历约会)中的本地日期时间。请注意,REST和持久层都不支持时区,因此您应该使用它Instant
。 -
Boolean
:一个Java布尔值。 -
Enumeration
:一个Java枚举对象。选择此类型后,子生成器将询问您要在枚举中使用哪些值,并将创建一个特定的enum
类来存储它们。 -
Blob
:一个Blob对象,用于存储一些二进制数据。选择此类型时,子生成器将询问您是否要存储通用二进制数据,图像对象或CLOB(长文本)。图像将专门在“角度”侧进行处理,因此可以将其显示给最终用户。
验证方式
可以为每个字段设置验证。根据字段类型,将提供不同的验证选项。
验证将在以下日期自动生成:
- HTML视图,使用Angular或React验证机制
- Java域对象,使用Bean验证
然后,在以下情况下使用Bean验证时,将使用它们进行自动验证:
- Spring MVC REST控制器(使用
@Valid
注释) - Hibernate / JPA(实体在保存之前会自动进行验证)
验证信息还将用于生成更精确的数据库列元数据:
- 必填字段将被标记为不可为空
- 唯一字段将创建唯一约束
- 具有最大长度的字段将具有相同的列长
验证有一些限制:
- 我们不支持Angular,React和Bean Validation的所有验证选项,因为我们仅支持客户端和服务器API通用的选项
- 正则表达式模式在JavaScript和Java中的工作方式不同,因此,如果配置一个,则可能需要调整其中一种生成的模式
- JHipster会在不知道您的验证规则的情况下生成适用于通用实体的单元测试:生成的测试可能未通过验证规则。在这种情况下,您将需要更新单元测试中使用的样本值,以使它们通过验证规则。
实体关系
实体关系仅适用于SQL数据库。这是一个相当复杂的主题,它具有自己的文档页面:管理关系。
为您的业务逻辑生成单独的服务类
与单独使用Spring REST Controller相比,拥有一个单独的服务类可以拥有更复杂的逻辑。拥有服务层(具有或不具有接口)将使您能够使用DTO(请参阅下一节)。
这与使用Spring service子生成器的逻辑相同,因此我们建议阅读其文档以获取更多信息。
数据传输对象(DTO)
默认情况下,JHipster实体不使用DTO,但如果您选择具有服务层,则可以将它们作为选项使用(请参见上一节)。这里是文档:使用DTO。
筛选
(可选)可以使用JPA过滤存储在SQL数据库中的实体。这里是文档:过滤实体。
分页
请注意,如果使用Cassandra创建应用程序,则分页不可用。当然,它将在将来的版本中添加。
分页使用链接头,作为在GitHub的API。JHipster在服务器端(Spring MVC REST)和客户端端(Angular / React)都提供了该规范的定制实现。
生成实体时,JHipster提供4个分页选项:
- 没有分页(在这种情况下,后端将不分页)
- 基于Bootstrap寻呼机的简单寻呼机
- 基于Bootstrap分页组件的完整分页系统
- 基于无限滚动指令的无限滚动系统
更新现有实体
实体配置保存在目录中的特定.json
文件中.jhipster
。因此,如果使用现有实体名称再次运行子生成器,则可以更新或重新生成实体。
当您为现有实体运行实体子生成器时,系统将询问您“是否要更新实体?这将替换该实体的现有文件,所有自定义代码都将被以下选项覆盖:
-
Yes, re generate the entity
-这将重新生成您的实体。提示:这可以通过--regenerate
在运行子发电机时传递一个标志来强制执行 -
Yes, add more fields and relationships
-这将给您一些问题,以添加更多字段和关系 -
Yes, remove fields and relationships
-这将向您提出问题,以从实体中删除现有字段和关系 -
No, exit
-这将存在子发电机而无需更改任何内容
您可能由于以下原因而要更新您的实体:
- 您想要向现有实体添加/删除字段和关系
- 您想将实体代码重置为原始状态
- 您已经更新了JHipster,并希望使用新模板生成您的实体
- 您已经修改了
.json
配置文件(格式与生成器提出的问题非常接近,因此不是很复杂),因此您可以拥有一个新版本的实体 - 您已经复制/粘贴了
.json
文件,并且想要一个与复制的实体非常接近的新实体
提示:要立即重新生成所有实体,可以使用以下命令(删除--force
时会在文件更改时询问您的问题)。
- Linux和Mac:
for f in
ls .jhipster; do jhipster entity ${f%.*} --force ; done
- 视窗:
for %f in (.jhipster/*) do jhipster entity %~nf --force
讲解
这是一个简短的教程,介绍如何创建具有一对多关系的两个实体(作者和书)。
重要的是,如果要“实时重载” JavaScript / TypeScript代码,则需要运行yarn start
。您可以转到“ 在开发中使用JHipster”页面以获取更多信息。
生成“作者”实体
因为我们希望在作者和书籍之间建立一对多的关系(一个作者可以写很多本书),所以我们需要首先创建作者。然后,在数据库级别,JHipster将能够在Book表上添加外键,从而链接到Author表。
jhipster entity author
回答有关该实体领域的下一个问题,作者有:
- 类型为“字符串”的“名称”
- 类型为“ LocalDate”的“ birthDate”
然后回答有关关系的问题,作者有:
- 与“ book”实体的一对多关系(尚不存在)
生成“ Book”实体
jhipster entity book
回答有关该实体领域的下一个问题,这本书有:
- 类型为“字符串”的“标题”
- 类型为“字符串”的“说明”
- 类型为“ LocalDate”的“ publicationDate”
- “ BigDecimal”类型的“价格”
然后回答有关人际关系的问题,这本书:
- 与“作者”实体具有多对一关系
- 并且此关系使用“名称”字段(来自Author实体)进行显示
检查生成的代码
使用来运行生成的测试套件,mvn test
它将测试Author实体和Book实体。
启动应用程序(例如,使用mvn
),登录并在“实体”菜单中选择“作者”和“书”实体。
检查数据库表,以查看是否正确插入了数据。
改进生成的代码
生成的文件包含所有基本的CRUD操作,如果您的需求很简单,则无需修改。
如果要修改生成的代码或数据库架构,则应遵循我们的开发指南
如果您想要一些更复杂的业务行为,则可能需要@Service
使用service子生成器添加一个Spring 类。