创建实体
来源:JHipster |
时间:2018-11-04
|
|

介绍

当你刚创建完应用时,你可能想要创建一些实体类。例如你也许想要创建一个Book和Author实体类。对于每个实体,你需要:

  • 一个数据库表

  • 一个Liquibase变更set

  • 一个JPA实体

  • 一个Spring data jpa repository

  • 一个带有基础增删改查的rest controller

  • 一个angular路由、组件以及服务

  • 一个HTML视图

  • 集成测试

  • 性能测试

如果你有多个实体,你可能还想创建他们之间的关系,比如这个例子,你需要:

  • 一个数据库外键

  • 指定Javascript和HTML代码管理此关系

实体sub-generator(子生成器)将会为每个实体创建所有需要的文件并且提供增删改查后端,sub-generator通过jhipster entity <entityName> --[options]运行

它支持的选项有:

  • --table-name <table_name> 通过JHipster会生成一个表,他的名称基于你的实体名称,如果你想要修改为不同的名称使用此选项

  • --angular-suffix <suffix> 如果你想所有的都带有自定义的后缀,可使用此选项

  • --regenerate 将会不做任何询问生成已存在的实体

  • --skip-server 不会服务端代码

  • --skip-client不会生成客户端代码

  • --db 跳过服务端代码生成时指定数据库

JHipster UML AND JDL Studio

此章节描述如何使用JHipster的标准命令行接口创建实体类。如果你想创建多个实体,你也许要使用一些图形工具。

如果你使用JDL Studio:

  • 你已使用import-jdl子生成器从JDL 文件生成实体,jhipster import-jdl your-jdl-file.jh

    • 当导入的时候如果你不想重新生成实体,你可以使用--json-only标志,跳过实体生成仅创建json文件于.jhipster文件夹中

    • 默认使用import-jdl仅会重新生成被改变的实体,如果你想所有的实体被重新生成,则通过--force生成

  • 如果你使用JhipsterUML代替import-jdl子生成器,你需要安装npm install -g jhipster-uml然后运行jhipster-uml youFileName.jh

实体字段

对于每个实体,你可以添加很多字段。你需要输入字段名称和类型,JHipster将会生成你所需的代码和配置。这些字段名称不能包含关键字

字段类型

JHipster支持很多字段类型,这些支持依赖于你的后台数据库,所有我们使用Java类型去描述他们:一个Java String在Oracle和Cassandra中不同,这是Jhipster生成健壮和正确的数据库代码的一种方式。

  • String 它的默认长度取决于后端,如果你使用JPA默认长度255,你可以通过检验规则来修改它

  • Integer

  • Long

  • Float

  • Double

  • BigDecimal

  • LocalDate 用于在Java中正确的管理日期

  • Instant 用于时间戳

  • ZoneDateTime 给定时区的本地时间

  • Enumeration 枚举对象,当选择此类型时,子生成器将会询问你对应的枚举值并创建enum类

  • Blob 用于存储二进制数据,当被选中时,子生成器会询问你存储的数据类型,是图片对象还是CLOB

校验

可以对每个字段设置校验,不同的字段具有不同校验选项

校验将会被自动的生成在:

  • Html views,使用the AngularJS validation mechanism

  • Java domain Obj, 使用 Bean Validation

当对象被以下面的方式使用时,会自动的对领域对象进行校验:

  • Sptring MVC/REST controllers(使用@Valid注解时)

  • Hibernate/JPA(实体在保存之前自动校验)

校验信息将尽可能清晰的使用数据库列的元数据描述:

  • 必填字段将被标记为non-nullable

  • 唯一字段将创建唯一约束

  • 有最大长度的字段与数据库中的长度相同

校验功能会有一些限制:

  • 不支持AnjularJS和Bean Validation的所有校验选项,只支持具有共同API的选项

  • Java和Javascript的正则表达式不一定能同时工作,当你配置其中一个时,你需要略微的修正另一个

  • JHipster生成的单元测试用例并不知道你的校验规则,这可能导致生成的单元测试用例不能通过校验规则,这时候你需要更新单元测试用例的值以使他们符合规则

实体关系

实体关系仅支持关系型数据库,稍后有章节详细说明

为你的业务逻辑生成单独的service class

相对于rest controller,单独的service类中允许有多种逻辑组合。业务层允许使用DTO。

相同逻辑使用spring service sub-generator,后续将由章节详细说明

Data Thransfer Objects(DTOs)

默认JHipster实体不使用DTOs,但是如果使用业务层时,DTOs是一中可用的数据传输方式,具体用法后续章节详细说明

Filtering(过滤或者查询)

可选,实体存储在数据库中可以使用JPA过滤。

分页

当你的应用使用Cassandra创建的时候,是不能使用分页的。当然这个特性将会被添加。

JHipster在服务端和客户端提供了依照标准规则的实现

当实体被生成时,JHipster提供了4中分页选项:

  • 不分页

  • 简单分页,基于bootstrap pager

  • 完成分页系统,基于Bootstrap pagination component

  • 滚动分页,基于infinite scroll directive

更新已存在的实体

实体配置保存在~/.jhipster/*.json文件中,如果你再次使用已存在的实体类名运行子生成器,你就可以更新或者重新生成实体

当你对一个已存在的实体运行子生成器时,将会询问’Do you want to update the entity? This will replace the existing files for this entity, all your custom code will be overwritten’(你想更新实体吗?这将会替换已存在的实体文件和实体相关的所有的代码将会被覆盖),有两种答案:

  • Yes, re generate the entity,这将重新生成你的实体

  • Yes, add more fields and relationships询问你以添加更多字段和关系

  • Yes, remove fields and relationships浙江询问你是否移除已存在的字段和关系

  • No, exit

你更新实体的理由可能如下:

  • 你想对已存在的实体添加或者移除字段及关系

  • 你想重置你的实体代码

  • 你更新了JHipster,想使用新的模板生成你的实体

  • 你修改了.json文件,所以你需要有一个新版本的实体

  • 你粘贴复制了.json文件,然后想生成此实体

快速生成多个实体:

  • linux & mac :

for f in `ls .jhipster`; do jhipster entity ${f%.*} --force ; done1
  • Windows:

for %f in (.jhipster/*) do jhipster entity %~nf --force1

指导

这是一个简短的引导以创建两个具有one-to-many的实体(Author 和 Book)

生成Author实体

一个Author包含多个Book的关系,所以我们需要首先创建Author,在数据库级别Jhipster将会创建一个外键在Book表上,这外键指向Author表

jhipster entity author

输入关于这个实体字段的问题的答案:

  • a “name” of type “String”

  • a “birthDate” of type “LocalDate”

输入关于这个实体关系的问题答案:

  • one-to-many with the “book” entity(当前Book还不存在)

生成Book实体

jhipster entity book

回答接下来关于book字段的的问题 :

  • title类型为String

  • description类型为String

  • publicationDate类型为LocalDate

  • price类型为BigDecimal

回答关于关系的问题:

  • 拥有与author的many-to-one的关系

  • 关系中使用name字段显示author

检查生成的代码

运行生成的测试用例mvn test,此测试用例测试Author和Book实体

启动应用,登录后点击- entities > Author

修改生成的代码

生成的文件包含了基础的CURD操作。如果你的需求比较简单的话,都不用进行任何修改。

如果你想修改生成的代码或者数据库表,你应该阅读后续的“开发指导”章节

如果你有一些组合的业务行为,你也许需要添加Spring的@Service类,请使用 service生成器


提交
查看更多评论
没有更多评论