美文网首页
jhipster生成实体

jhipster生成实体

作者: RickChan | 来源:发表于2019-10-08 14:29 被阅读0次

    仅适用于jhipster5.1.0

    创建一个实体

    请查看有关创建新JHipster应用程序的视频教程

    重要的是,如果您想“实时重载” JavaScript / TypeScript代码,则需要运行yarn start。您可以转到“ 在开发中使用JHipster”页面以获取更多信息。

    介绍

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

    • 数据库表
    • 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
      
      
    • 如果要使用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个分页选项:

    更新现有实体

    实体配置保存在目录中的特定.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 inls .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 类。

    你完成了!

    相关文章

      网友评论

          本文标题:jhipster生成实体

          本文链接:https://www.haomeiwen.com/subject/squbpctx.html