创建一个实体 Creating an entity

请查看我们的 video tutorial 创建一个新的JHipster应用程序!

重要 如果您想要“实时重新加载”您的JavaScript / TypeScript代码,则需要运行 gulp (对于JavaScript / AngularJS 1) 或 yarn start (对于TypeScript / Angular 2+). 您可以 Using JHipster in development 页面中获取更多信息。

介绍 Introduction

创建应用程序后,您将需要创建 实体。例如, 你可以创建一个 AuthorBook 实体. 对于每个实体, 你需要:

  • 数据库表
  • 一个Liquibase变更集
  • JPA实体
  • 一个Spring数据JPA存储库
  • 一个Spring MVC REST控制器,具有基本的CRUD操作
  • 一个 Angular 路由器, 组件和服务
  • HTML视图
  • Integration tests, 集成测试,以验证一切正常工作
  • Performance tests, 看是否一切顺利

如果您有几个实体,您可能希望在它们之间建立关系。为此,您将需要:

  • 数据库外键
  • 用于管理此关系的特定JavaScript和HTML代码

    "entity" 子生成器将创建所有必需的文件,并为每个实体提供一个CRUD前端 (参见 project structure). 子生成器可以通过运行调用 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文件生成实体。
    • 如果您不想重新生成实体,则在导入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
  • 如果要使用JHipster UML而不是import-jdl子生成器,则需要运行安装它npm install -g jhipster-uml,然后运行jhipster-uml yourFileName.jh

实体字段 Entity fields

对于每个实体,您可以根据需要添加任意数量的字段。您将需要输入字段名称及其类型,JHipster将为您生成所有必需的代码和配置,从Angular HTML视图到Liquibase更改日志。

这些字段在您使用的技术中不能包含保留关键字。例如,如果你使用MySQL:

  • 您不能使用Java保留关键字(因为您的代码将无法编译)
  • 您不能使用MySQL保留关键字(因为您的数据库模式更新将失败)

字段类型 Field types

JHipster支持许多字段类型。这种支持取决于您的数据库后端,因此我们使用Java类型来描述它们:Java String 将以不同的方式存储在 Oracle 或 Cassandra, 它是JHipster为您生成正确的数据库访问代码的优势之一。

  • String: Java字符串。它的默认大小取决于底层后端(如果使用JPA,默认max值为255),但是可以使用验证规则(例如放大小1024)进行更改
  • Integer: A Java Integer.
  • Long: A Java Long.
  • Float: A Java Float.
  • Double: A Java Double.
  • BigDecimal: A java.math.BigDecimal object, 用于当您想要精确的数学计算(通常用于财务操作)。
  • LocalDate: A java.time.LocalDate object, 用于正确管理Java中的日期。
  • Instant: A java.time.Instant object, 用于表示时间戳,即时间线上的瞬时点。
  • ZonedDateTime: A java.time.ZonedDateTime object, 用于表示给定时区中的本地日期时间(通常为日历约会)。请注意,时区不是REST支持的,也不是持久层,所以你应该最有可能使用 Instant.
  • Boolean: A Java Boolean.
  • Enumeration: Java枚举对象。当选择此类型时,子生成器会询问您在枚举中需要什么值,并创建一个特定的 enum 类来存储它们.
  • Blob: 一个Blob对象,用于存储一些二进制数据。当选择此类型时,子生成器将询问您是否要存储通用二进制数据,图像对象或CLOB(长文本)。图像将专门在角度处理,因此它们可以显示给最终用户。

验证 Validation

可以为每个字段设置验证。根据字段类型,将提供不同的验证选项。

验证将自动生成于:

然后,Bean验证将用于在域对象使用时自动验证:

  • Spring MVC REST控制器(使用 @Valid 注释)
  • Hibernate / JPA(实体在保存之前自动验证)

验证信息还将用于生成更精确的数据库列元数据:

  • 必填字段将被标记为不可为空
  • 具有最大长度的字段将具有相同的列长度

验证有一些限制:

  • 我们不支持AngularJS和Bean验证的所有验证选项,因为我们只支持这两种API通用的验证选项
  • 正则表达式模式在JavaScript和Java中不起作用,因此,如果您配置一个表单模式,则可能需要调整生成的模式之一
  • JHipster生成可用于通用实体的单元测试,而不知道您的验证规则:生成的测试可能未通过验证规则。在这种情况下,您将需要更新单元测试中使用的示例值,以便它们通过验证规则。

实体关系 Entity relationships

实体关系仅适用于SQL数据库。这是一个相当复杂的主题,它有自己的文档页面: Managing relationships.

数据传输对象(DTO) Data Transfer Objects (DTOs)

默认情况下,JHipster实体不使用DTO,但它们作为选项可用。以下是文档: Using DTOs.

分页 Pagination

请注意,如果您使用 Cassandra.创建了应用程序,则无法进行分页。当然这将在以后的版本中添加。

分页使用 the Link header, 如 GitHub API. JHipster在服务器(Spring MVC REST)和客户端(AngularJS)两方面提供了本规范的自定义实现。 当生成实体时,JHipster提供4个分页选项:

更新现有实体 Updating an existing entity

实体配置保存在目录中的特定 .json 文件, 在 .jhipster 目录中. 因此,如果再次运行子生成器,则使用现有实体名称,可以更新或重新生成实体。

当您为现有实体运行实体子生成器时,将会询问您是否要更新实体?这将替换此实体的现有文件,所有您的自定义代码将被覆盖“具有以下选项:

  • Yes, re generate the entity - 这只会重新生成您的实体。提示: 运行子生成器时可以通过传递--regenerate 标志来强制执行此操作 。
  • Yes, add more fields and relationships - 这将给您提供更多的领域和关系的问题
  • Yes, remove fields and relationships - 这将提供您从实体中删除现有字段和关系的问题
  • No, exit - 这将存在子生成器而不改变任何东西

您可能需要更新您的实体,原因如下:

  • 您想要添加/删除现有实体的字段和关系
  • 您要将实体代码重置为原始状态
  • 您已更新JHipster,并希望通过新模板生成实体
  • 您已修改 .json 配置文件(格式与生成器提出的问题非常接近,因此不是很复杂),因此您可以拥有一个新版本的实体
  • 您有复制/粘贴该 .json 文件,并希望一个非常接近复制实体的新实体

提示: 一次重新生成所有实体,您可以使用以下命令 (remove the --force to have questions asked when files have changed).

  • Linux & Mac: for f in `ls .jhipster`; do jhipster entity ${f%.*} --force ; done
  • Windows: for %f in (.jhipster/*) do jhipster entity %~nf --force

教程 Tutorial

这是一个简短的教程,用于创建两个具有一对多关系的实体 (a Author and a Book) 。

重要 如果您想要“实时重新加载”您的JavaScript / TypeScript代码,则需要运行 gulp (for JavaScript/AngularJS 1) 或 yarn start (for TypeScript/Angular 2+). 您可以在Using JHipster in development 页面中使用JHipster了解更多信息。

生成“作者”实体 Generate the "Author" entity

因为我们希望在作者和书籍之间有一对多的关系(一个作者可以写很多书),我们需要先创建作者。在数据库级别,JHipster将能够在Book表上添加一个外键,链接到作者表。

jhipster entity author

回答有关这个实体领域的下一个问题,作者有:

  • a "name" of type "String"
  • a "birthDate" of type "LocalDate"

然后回答有关关系的问题,作者有:

  • A one-to-many relationship with the "book" entity (which doesn't exist yet)

生成“书”实体 Generate the "Book" entity

jhipster entity book

回答有关这个实体领域的下一个问题,这本书有:

  • a "title", of type "String"
  • a "description", of type "String"
  • a "publicationDate", of type "LocalDate"
  • a "price", of type "BigDecimal"

然后回答有关关系的问题,书:

  • Has many-to-one relationship with the "author" entity
  • And this relationship uses the "name" field (from the Author entity) to be displayed

检查生成的代码

运行生成的测试套件, mvn test, 它将测试作者实体和Book实体。

启动应用程序(例如使 mvn), 登录并在“实体”菜单中选择“作者”和“预订”实体。

检查数据库表,查看您的数据是否正确插入。

改善生成的代码 Improve the generated code

生成的文件包含所有基本的CRUD操作,如果需要简单,则不需要修改它们。

如果要修改生成的代码或数据库模式,则应遵循我们的 development guide

如果您想要更复杂的业务行为,则可能需要 @Service 使用 service sub-generator.

你完成了!

您生成的CRUD页面应如下所示:

results matching ""

    No results matching ""